問題の詳細な説明
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 を直接使用するには、手動によるアプローチが必要です。あるいは、WPF は、バックグラウンド スレッドでのタスクの実行とメイン UI スレッドへの進行状況の報告を簡素化する、BackgroundWorker クラスを提供します。以上がバックグラウンド スレッドから WPF コントロールを安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。