我知道我以前看过一篇关于此的文章或 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 元素何时真正附加到线程?