首頁 > 後端開發 > C++ > 如何在 C# 中異步等待進程退出而不凍結 GUI?

如何在 C# 中異步等待進程退出而不凍結 GUI?

Mary-Kate Olsen
發布: 2025-01-04 14:25:43
原創
399 人瀏覽過

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))
登入後複製

方法內部:

  • 如果進程已經退出,則該方法立即傳回已完成的任務。
  • 否則,a TaskCompletionSource創建,並將流程的 EnableRaisingEvents 屬性設為 true。
  • 事件處理程序附加到流程的 Exited 事件,該處理程序在流程退出時設定任務完成來源的結果。
  • 如果提供了取消令牌,則註冊它以在呼叫時取消任務。
  • 返回任務,當進程退出或當進程退出時任務完成呼叫取消令牌。

用法

要使用 WaitForExitAsync() 方法:

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

    // Do some fun stuff here...
}
登入後複製

以上是如何在 C# 中異步等待進程退出而不凍結 GUI?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板