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