ホームページ >バックエンド開発 >C++ >GUI をフリーズさせずに C# でプロセスの終了を非同期的に待つにはどうすればよいですか?

GUI をフリーズさせずに C# でプロセスの終了を非同期的に待つにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-04 14:25:43450ブラウズ

How Can I Asynchronously Wait for Process Exit in C# Without Freezing the GUI?

プロセスの終了を非同期で待機しています

多くのアプリケーションでは、次に進む前にプロセスが終了するのを待つことが不可欠です。ただし、Process.WaitForExit() を使用すると、グラフィカル ユーザー インターフェイス (GUI) がフリーズする可能性があります。この問題を回避するには、イベントベースまたはスレッドベースのソリューションが必要です。

イベントベースのアプローチ

.NET 4.0/C# 5 では、非同期パターンは、待機プロセスを表現するためのよりエレガントな方法を提供します。 WaitForExitAsync() メソッドを Process クラスに追加すると、アプリケーションがプロセスの終了を非同期的に待機できるようになります。

public static Task WaitForExitAsync(this Process process, CancellationToken cancellationToken = default(CancellationToken))

メソッド内:

  • がすでに終了している場合、メソッドは完了したタスクをすぐに返します。
  • それ以外の場合、 TaskCompletionSourceが作成され、プロセスの EnableRaisingEvents プロパティが true に設定されます。
  • イベント ハンドラーがプロセスの Exited イベントにアタッチされ、プロセスの終了時にタスク完了ソースの結果が設定されます。
  • キャンセルトークンが提供されている場合、呼び出された場合にタスクをキャンセルするように登録されます。
  • プロセスが完了するとタスクが返されます。

使用法

WaitForExitAsync() メソッドを使用するには:

public async void Test()
{
    var process = new Process("processName");
    process.Start();
    await process.WaitForExitAsync();

    // Do some fun stuff here...
}

以上がGUI をフリーズさせずに C# でプロセスの終了を非同期的に待つにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。