記事内に広告が含まれています。

WPF: Dispatcher を利用した非同期処理

2015年4月11日

WPF でメインスレッドとは異なるスレッドで非同期処理を行う際には、Dispatcher を使います。
タイミングの問題で UI エレメントに正しくアクセス出来ない時に使っています。本来は並列処理など違う用途で威力を発揮するんだと思います。

C#

private void Button_Click(object sender, RoutedEventArgs e)
{
    Debug.WriteLine("メインスレッド1");
    
    this.Dispatcher.BeginInvoke(
     new Action(() =>
     {
         // 時間のかかる処理を実行
         Debug.WriteLine("別スレッド");
     })
    );

    Debug.WriteLine("メインスレッド2");
}

VB.NET

Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
    Debug.WriteLine("メインスレッド1")
    Me.Dispatcher.BeginInvoke(
    Sub()
        ' Dispatcherを利用してUIスレッドに処理を配送
        ' 時間のかかる処理を実行
        Debug.WriteLine("別スレッド")
    End Sub)
    Debug.WriteLine("メインスレッド2")
End Sub

-WPF