ホームページ >バックエンド開発 >C++ >WPF で Async/Await を使用してバックグラウンド タスクを効果的に管理する方法

WPF で Async/Await を使用してバックグラウンド タスクを効果的に管理する方法

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)
  • [非同期および待機](https://msdn.microsoft.com/en-us/library/hh191443(v=vs.103).aspx)
  • [非同期/待機 FAQ](https://blogs.msdn .microsoft.com/brada/2011/09/29/async-await-faq/)

以上がWPF で Async/Await を使用してバックグラウンド タスクを効果的に管理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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