[VB.NET] ワーカースレッドから コントロール(UI スレッド)へのアクセス その1 で、プラットホームごとで書き方が違うよ…_| ̄|○ ということでしたが、書き方を共通にする方法があります。
以下のように書くことで、すべてのプラットホーム(Windows Forms / WPF / Windows Phone / Silverlight / WinRT)共通で記述できます。
ポイントは Dispather を使わず、Task を使用し、TaskScheduler パラメータに UI スレッドの同期コンテキストを指定して実行するところです。
Class MainWindow ' この行は各プラットホーム個別 Private _syncContext = Threading.Tasks.TaskScheduler.FromCurrentSynchronizationContext Sub worker1() Dim t = New Threading.Tasks.Task( _ Sub() Button1.Content = Date.Now.ToString ' Windows Forms の場合は Button1.Text End Sub) t.Start(_syncContext) End Sub
ただし、上記を書くには、以下が最低限必須です。
- .NET Framework は 4 以上 #.NET Framework 2系(2.0~3.5) は不可
- Windows Phone は 8 以上 # Windows Phone 7 は不可
- Silverlight は 5 以上 # Silverlight 4 は不可