Dispatcherによる、UI更新
別スレッドによるUI更新は、invokeやpostmessageを使った更新遅延テクニックを使いますが、WPFで標準的に利用されているDispacherクラスを利用したUI更新を使うことができます。むしろ、今後はこの更新テクニックが主流であるといえます。Postmessageは役割を終えたのかもしれません。
まず、UI更新に利用するDispacherクラスですが完全クラス名はSystem.Windows.Threading.Dispatcherで、参照設定はWindowsBaseになります。WPFプロジェクトだとデフォルトで参照設定されていますが、WindowsFormsプロジェクトだと入っていないので、必要であれば追加します。
使い方の例。Dispacherオブジェクトを格納する変数をForm_Loadで格納しておきます。
private System.Windows.Threading.Dispatcher _dispather = null; private void MainForm_Load(object sender, EventArgs e) { // UIスレッドのディスパッチャー取得 _dispather = Dispatcher.CurrentDispatcher; }
あとは、UIを更新するところで以下のように記述します。
_dispather.BeginInvoke(new Action(() => { this.checkBox1.Checked = false; }), null);