多くのアプリケーションでは、他のプロセスが完了するのを待つ必要があります。デフォルトでは、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 中国語 Web サイトの他の関連記事を参照してください。