首頁 >後端開發 >C++ >如何使用 Async/Await 有效管理 WPF 中的背景任務?

如何使用 Async/Await 有效管理 WPF 中的背景任務?

Patricia Arquette
Patricia Arquette原創
2025-01-07 14:54:10139瀏覽

How to Effectively Manage Background Tasks in WPF with Async/Await?

在WPF 中有效執行後台任務

傳統上,WPF 應用程式中的後台任務是使用TAP、TPL、BackgroundWorker 或調度員。然而,對於需要特定標準的任務,例如非阻塞 UI、進度報告、取消和多執行緒支持,建議的方法已經演變。

在 .NET 4.5 及更高版本中,最佳解決方案是利用基於任務的 API 和非同步/等待模式。這允許開發人員以順序方式編寫程式碼,同時在後台非同步執行任務。結構化錯誤處理也簡化了異常處理的使用。

考慮以下範例:

private async void Start(object sender, RoutedEventArgs e)
{
    try
    {
        await Task.Run(() =>
        {
            int progress = 0;
            for (; ; )
            {
                System.Threading.Thread.Sleep(1);
                progress++;
                Logger.Info(progress);
            }
        });
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

這裡,Start 方法使用 Task.Run() 啟動一個非同步任務,該任務允許任務並發執行而不干擾 UI 執行緒。此任務循環運行,遞增進度並記錄資訊。異常處理在非同步區塊內處理。

這種方法提供了所需的非阻塞行為,允許進度報告,支援取消(透過與任務關聯的取消令牌),並使任務能夠在如果需要,可以使用多個執行緒。

要進一步閱讀此主題,請參閱以下資源:

  • [如何在 WPF 後台執行任務同時能夠提供報告並允許取消? ](https://stackoverflow.com/questions/642369/how-to-execute-task-in-the-wpf-background-while-able-to-provide-report-and -all)
  • [4.5中的非同步:在非同步中啟用進度並取消API](https://msdn.microsoft.com/en-us/library/jj193081(v=vs.110).aspx)
  • [非同步和等待](h ttps://msdn.microsoft.com/en-us/library/hh191443(v=vs.103).aspx)
  • [非同步/等待常見問題解答](https://blogs.msdn .microsoft.com/brada/2011/09/29/async-await-faq/)

以上是如何使用 Async/Await 有效管理 WPF 中的背景任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn