私はこのコードを書いた:WinformsアプリケーションでSynchronizationContext.Currentがnullになるのはなぜですか?
System.Threading.SynchronizationContext.Current.Post(
state => DoUpdateInUIThread((Abc)state),
abc);
をしかしSystem.Threading.SynchronizationContext.Currentがnull
私はこのコードを書いた:WinformsアプリケーションでSynchronizationContext.Currentがnullになるのはなぜですか?
System.Threading.SynchronizationContext.Current.Post(
state => DoUpdateInUIThread((Abc)state),
abc);
をしかしSystem.Threading.SynchronizationContext.Currentがnull
はthis explanationを参照してください。
SynchronizationContext.Currentだけのブログ記事は、回避策を提案している(あなたが実際にそれを必要としない唯一のスレッドである)メインスレッド
に設定されています。
動作させるにはUIスレッドで
private SynchronizationContext synchronizationContext;
クラス(メインスレッド)ワーカースレッド
synchronizationContext.Post(
state => DoUpdateInUIThread((Abc)state),
abc);
syncronizationContextはワーカースレッドでどのようにインスタンス化されるか、または渡されますか? – Tim
あなたのフォームに 'BackgroundWorker'を使っているとしましょう。 'SynchronizationContext.Current'をコンストラクタやクラスレベルの変数として保存すると、' RunWorkerCompleted'ハンドラでアクセスできます。また、プレゼンターのような別のクラスで作業をしている場合は、UIスレッドでプレゼンターを作成し、コンストラクターにコンテキストを保存することもできます。 –
ニースの回避策で
で
! – psulek