ホームページ > バックエンド開発 > C++ > UI をフリーズさせずに WPF アプリケーションでバックグラウンド タスクを実行する方法

UI をフリーズさせずに WPF アプリケーションでバックグラウンド タスクを実行する方法

Barbara Streisand
リリース: 2025-01-07 14:45:42
オリジナル
431 人が閲覧しました

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

WPF アプリケーションでバックグラウンド タスクを実行する

WPF アプリケーションでは、ユーザー インターフェイスのフリーズを避けるために、バックグラウンドでタスクを実行する必要があることがよくあります ( UI)。これを行うには、開発者は次の基準を満たすメカニズムが必要です:

  • ノンブロッキング UI スレッド
  • 進行状況レポート
  • キャンセル
  • マルチスレッドsupport

推奨アプローチ: タスクベースの 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/)
  • [非同期/待機 FAQ](https://docs.microsoft .com/en-us/dotnet/csharp/programming-guide/concepts/async/async-faq)

以上がUI をフリーズさせずに WPF アプリケーションでバックグラウンド タスクを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート