2015年4月11日土曜日

Dispatcher を利用した非同期処理


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

0 件のコメント:

コメントを投稿