許多應用程式需要等待其他行程完成。預設情況下,使用 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中文網其他相關文章!