2009-11-10 16 views

答えて

15

this explanationを参照してください。

SynchronizationContext.Currentだけのブログ記事は、回避策を提案している(あなたが実際にそれを必要としない唯一のスレッドである)メインスレッド

に設定されています。

+0

ニースの回避策で

synchronizationContext = System.Threading.SynchronizationContext.Current; 

! – psulek

18

動作させるにはUIスレッドで

private SynchronizationContext synchronizationContext; 

クラス(メインスレッド)ワーカースレッド

synchronizationContext.Post( 
    state => DoUpdateInUIThread((Abc)state),  
    abc); 
+0

syncronizationContextはワーカースレッドでどのようにインスタンス化されるか、または渡されますか? – Tim

+0

あなたのフォームに 'BackgroundWorker'を使っているとしましょう。 'SynchronizationContext.Current'をコンストラクタやクラスレベルの変数として保存すると、' RunWorkerCompleted'ハンドラでアクセスできます。また、プレゼンターのような別のクラスで作業をしている場合は、UIスレッドでプレゼンターを作成し、コンストラクターにコンテキストを保存することもできます。 –

関連する問題