■
EssentialWPFは今のところ、WPFのバイブル的な本。
勝手に、P.405に追記。(最初はなんの説明かわからなかった。)
ユーザインターフェース関連はみなWM_XXXXというメッセージで制御されているため、アプリでは唯一のスレッドでしか扱えない。新たなスレッドを作成して、その中からユーザインターフェースを触ろうとすると大問題を起こす。
ので、そのための方法を説明しているらしい。
1、SynchronizationContextを使用する場合
2、Dispatcherを使用する場合
void BackgroundTask(object parameter)
{
...// ここは別スレッドで実行される。 Thread.CurrentThread.ManagedThreadIdが呼び出し側と異なる。
_context.Post( Complete, result ); // UIスレッドをSynchronizationContext.Currentをとおして呼び出す場合
// delegate void MyDelegate( object obj );
// m_wは呼び出し元のUIElementm_w.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new MyDelegate( Complete ), result); //WPF.Dispatcherを使用する場合
}