ホームページ > バックエンド開発 > C++ > バックグラウンド スレッドから WPF コントロールを安全に更新するにはどうすればよいですか?

バックグラウンド スレッドから WPF コントロールを安全に更新するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-17 14:01:12
オリジナル
299 人が閲覧しました

How Can I Safely Update WPF Controls from a Background Thread?

Dispatcher.Invoke() を使用して、メイン以外のスレッドから WPF コントロールを更新します

問題の詳細な説明

WPF アプリケーションを開発する場合、UI スレッドとその制限を理解することが重要です。非メイン (バックグラウンド) スレッドから WPF コントロールを操作しようとすると、予期しないまたは予測できない動作が発生する可能性があります。これは、WPF UI コントロールがメイン UI スレッドに関連付けられており、スレッド セーフではないためです。

Dispatcher.Invoke() を使用する

この問題を解決するために、WPF は Dispatcher.Invoke() メソッドを提供します。このメソッドを使用すると、開発者は任意のスレッドからメイン UI スレッドでコードを実行できます。 Invoke メソッドでコントロールの更新をカプセル化することで、他のスレッドからコントロールを安全に変更できます。

Dispatcher.Invoke() の使用例

バックグラウンド スレッドでデータを取得し、進行状況を進行状況バーに表示する WPF アプリケーションがあるとします。次のコード スニペットは、Dispatcher.Invoke() を使用してこれを実現する方法を示しています。

<code>// 创建一个后台线程来检索数据
var backgroundThread = new Thread(() => {
    // 从 Web 服务器检索数据
    var data = GetDataFromWebserver();

    // 使用 Dispatcher.Invoke() 在主 UI 线程上更新进度条
    Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal,
        new Action(() => {
            this.progressBar.Value = data.Progress;
        }));
});

// 启动后台线程
backgroundThread.Start();</code>
ログイン後にコピー
この例では、Dispatcher.Invoke() メソッドがバックグラウンド スレッドで使用されます。これは、進行状況バーの値を更新するコードをカプセル化します。 DispatcherPriority.Normal パラメーターは、更新操作が通常の優先順位のキューで実行される必要があることを示します。

その他のオプション

Dispatcher を直接使用するには、手動によるアプローチが必要です。あるいは、WPF は、バックグラウンド スレッドでのタスクの実行とメイン UI スレッドへの進行状況の報告を簡素化する、BackgroundWorker クラスを提供します。

以上がバックグラウンド スレッドから WPF コントロールを安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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