许多应用程序需要等待其他进程完成。默认情况下,使用 Process.WaitForExit() 会导致调用线程阻塞,从而可能冻结 GUI。本文探讨了一种基于事件的方法来实现 .NET 中的异步进程等待。
借助 .NET 4.0 和 C# 5 中引入的增强功能,我们可以优雅地表示使用异步模式进行异步等待。以下代码片段演示了如何操作:
public static Task WaitForExitAsync(this Process process, CancellationToken cancellationToken = default(CancellationToken)) { if (process.HasExited) return Task.CompletedTask; var tcs = new TaskCompletionSource<object>(); process.EnableRaisingEvents = true; process.Exited += (sender, args) => tcs.TrySetResult(null); if(cancellationToken != default(CancellationToken)) cancellationToken.Register(() => tcs.SetCanceled()); return process.HasExited ? Task.CompletedTask : tcs.Task; }
要利用异步等待功能,只需在 Process 实例上调用 WaitForExitAsync() 方法即可:
public async void Test() { var process = new Process("processName"); process.Start(); await process.WaitForExitAsync(); //Do some fun stuff here... }
异步方法允许您的 GUI 在等待过程完成时保持响应。它还消除了手动创建线程和事件委托的需要。
以上是.NET 中如何异步等待进程退出?的详细内容。更多信息请关注PHP中文网其他相关文章!