[VB.NET] ワーカースレッドから コントロール(UI スレッド)へのアクセス その2

2013年8月29日

 [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 は不可

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org