任何人都可以解释一下,如何在BackgroundWorker线程中创建没有错误的WPF窗口?
我有一些课程(WPF窗口):
public partial class Captcha : Window
{
public Captcha()
{
InitializeComponent();
}
private void SendCaptchaBtn_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
this.Close();
}
}
在backgroundworker的DoWork函数中,我试图用这个Window创建一个对象:
BackgroundWorker bgWorker = new BackgroundWorker();
bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork);
bgWorker.RunWorkerAsync();
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
parser = new Parser();
parser.ParseFunc(tempKeywords);
}
Parser对象有一个“Captcha”窗口:
Captcha captcha_dlg = new Captcha();
当我运行程序时,我在Captcha-class点的构造函数中遇到运行时错误:调用线程必须是STA,因为许多UI组件都需要这个。 怎么了? Thansk帮助和抱歉我的坏英语:(。
答案 0 :(得分:4)
简短的回答是,你不能。
BackgroundWorker
使用的任何线程都是MTA线程,因为它们来自线程池。启动后无法将线程从MTA更改为STA。
如果你想在另一个线程上创建UI,最好的办法是使用Thread类,并在启动前通过调用SetApartmentState()将其设置为STA。