WPF スレッドセーフ UI 更新: UI 要素にアクセスするバックグラウンド スレッドのトラップを回避します
WPF アプリケーションでは、非 UI スレッドから UI 要素を更新するときにスレッド セーフを確保する必要があります。これは、メインスレッドで UI 更新操作を呼び出すことで実現できます。
次のコード スニペットでは、FileSystemWatcher
によってトリガーされたバックグラウンド スレッドから dataGridRows
コレクションを更新しようとしています。ただし、dataGridRows
コレクションはメイン UI スレッドで動作し、ファイル モニターは別のスレッドで動作するため、クラッシュが発生します。
この問題を解決し、バックグラウンド スレッドから UI 要素に安全にアクセスするには、Dispatcher.Invoke()
を使用できます。このメソッドを使用すると、メイン UI スレッドでデリゲートを実行でき、UI 操作が同期的に実行されるようになります。
Dispatcher.Invoke()
の実装方法は次のとおりです:
<code class="language-csharp">Application.Current.Dispatcher.Invoke(new Action(() => { dataGridRows.Add(ds); }));</code>
あるいは、特定の UI 要素 (DataGrid 自体など) にスケジューラを使用することもできます。
<code class="language-csharp">dataGrid.Dispatcher.Invoke(new Action(() => { dataGridRows.Add(ds); }));</code>
Dispatcher.Invoke()
を使用すると、UI の更新がメインスレッドで確実に実行され、潜在的な競合状態やクラッシュが防止されます。このアプローチにより、WPF アプリケーションの整合性を維持しながら、バックグラウンド スレッドから UI 要素を安全に操作できます。
以上がバックグラウンド スレッドから WPF UI 要素を安全に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。