我有创建后台线程来执行某些操作的方法。在这个后台线程中我创建对象。但是这个对象在运行时创建时给了我一个例外:
调用线程必须是 STA,因为许多 UI 组件都需要它。
我知道我必须使用 Dispatcher 来向 UI 反映某些内容。但在本例中,我只是创建一个对象,而不与 UI 进行交互。这是我的代码:
public void SomeMethod()
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(Background_Method);
worker.RunWorkerAsync();
}
void Background_Method(object sender, DoWorkEventArgs e)
{
TreeView tv = new TreeView();
}
如何在后台线程中创建对象?
我使用 WPF 应用程序
TreeView
是一个UI控件。您只能在 UI 线程上创建和操作 UI 控件,因此您尝试执行的操作是不可能的。
你想要做的是在后台线程上完成所有耗时的工作,然后“回调”到UI线程来操作UI。这实际上很简单:
void Background_Method(object sender, DoWorkEventArgs e)
{
// ... time consuming stuff...
// call back to the window to do the UI-manipulation
this.BeginInvoke(new MethodInvoker(delegate {
TreeView tv = new TreeView();
// etc, manipulate
}));
}
我可能语法错误BeginInvoke
(这超出了我的想象),但无论如何,你就可以了......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)