以前にこれに関する記事またはSOを見たことがあることは知っていますが、今は見つけられないようです。複数のスレッドで発生している UI アクションをチェックするテストを同僚が作成するのを手伝っているときに、問題が発生しました (ここで問題が発生していることに気付きました... 現時点で注目したいのはそれではありません :))。コードは、次のような擬似コードのようになります。
[RequiresSTA]
Test
{
var tb = new Textbox();
tb.DoSomethingAsyncAndThenUpdateTB() //This is done via tb.SetValue being called
}
...
DoSomethingAsyncAndThenUpdateTB()
{
var bw = new BackgroundWorker();
bw.DoWork += ...Do Stuff...
bw.RunWorkerCompleted += { tb.Text = "foo";}
}
私が直面している問題はOnComplete
、クロススレッド例外がスローされていることです。ただし、すべてが STA スレッドで作成されているはずです。問題は、UI要素が作成時ではなくスレッドにアタッチされることだと思いますが、後で....そして、テキストボックスがSTAではないスレッドにアタッチされてしまいますか? それともバックグラウンドワーカー?
質問:
UI 要素が実際にスレッドに接続されるのはいつですか?