現在の にラムダ式を投稿するWindowsFormsSynchronizationContext
と、ラムダ コードがバックグラウンド スレッドで実行されることがわかりました。
// running on main thread here
myLabel = new Label();
this.Controls.Add(myLabel);
WindowsFormsSynchronizationContext.Current.Post( ignore => {
// returns true !
bool invokeRequired = myLabel.InvokeRequired;
// returns a background thread, not the UI thread
int threadId = System.Threading.Thread.CurrentThread.ManagedThreadId;
// throws, because we are (unexpectedly) on a background, different thread
myLabel.Text = "whatever";
},null);
その上、を返すのではなく、通常WindowsFormsSynchronizationContext.Current
の を返すようです。WindowsFormsSynchronizationContext
System.Threading.SynchronizationContext
これは、スレッドの問題がなく、最近変更されていないフォームで突然発生しています (ソリューションの他の部分は変更されていました)。明らかな間違い (バックグラウンド スレッドでフォーム自体をインスタンス化するコードや、バックグラウンド スレッドで作成されたコントロールなど) を探してみましたが、重大な違反を見つけることができませんでした。
おそらく私は間違った方向を見ていますか?