sugarontop2007-11-09


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は呼び出し元のUIElement

m_w.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Normal, new MyDelegate( Complete ), result); //WPF.Dispatcherを使用する場合

}