Pol*_*ris 10 c# wpf multithreading backgroundworker
我有创建后台线程的方法来做一些动作.在这个后台线程中我创建了对象.但是在运行时创建时这个对象给了我一个例外:
调用线程必须是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();
}
Run Code Online (Sandbox Code Playgroud)
如何在后台线程中创建对象?
我使用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
}));
}
Run Code Online (Sandbox Code Playgroud)
我可能有错误的语法BeginInvoke(它不在我的脑海中),但无论如何你去了...
| 归档时间: |
|
| 查看次数: |
6675 次 |
| 最近记录: |