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);