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