首頁 > 後端開發 > C++ > 如何在 WPF 應用程式中執行後台任務而不凍結 UI?

如何在 WPF 應用程式中執行後台任務而不凍結 UI?

Barbara Streisand
發布: 2025-01-07 14:45:42
原創
431 人瀏覽過

How to Execute Background Tasks in WPF Applications Without Freezing the UI?

在WPF 應用程式中執行後台任務

在WPF 應用程式中,通常需要在背景執行任務以避免凍結使用者介面(使用者介面).為此,開發人員需要一個滿足以下條件的機制:

  • 非阻塞UI 執行緒
  • 進度報告
  • 取消
  • 多執行緒支援

建議方法:基於任務API 和Async/Await

隨著.NET 4.5(或帶有Microsoft.Bcl.Async 庫的.NET 4.0)的發布,後台任務的推薦方法是利用基於任務的API和非同步/等待。此技術具有以下優點:

  • 偽順序程式碼工作流程:開發人員可以編寫讀起來像順序工作流程的程式碼,使其更易於理解和維護。
  • 結構化異常處理: Async/await 提供了結構化的方式來處理異步

示例實現

以下程式碼示範如何使用基於任務的API 和async/await執行後台任務:

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

此程式碼與 UI 執行緒並行產生一個新任務,讓 UI 在後台任務進行時保持回應。它還包括異常處理,以便在任務執行期間發生異常時顯示錯誤訊息。

其他資源

有關在帶有進度報告的WPF 中執行後台任務的更多信息和取消支持,請考慮以下參考:

  • [如何在WPF 後台執行任務,同時能夠提供報告並允許取消? ](https://stackoverflow.com/questions/12342842/how-to-execute-task-in-the-wpf-background-while-able-to-provide-report-a)
  • [4.5中的非同步:在非同步中啟用進度和取消API](https://blogs.msdn.microsoft.com/charlie/2012/03/14/async-in-4-5-enabling-progress-and-cancellation- in-async-apis/)
  • [非同步與等待](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/)
  • [非同步/等待常見問題解答]( https://docs.microsoft .com/en-us/dotnet/csharp/programming-guide/concepts/async/async-faq)

以上是如何在 WPF 應用程式中執行後台任務而不凍結 UI?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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