用于与Task / BackgroundWorker一起使用的DLL上的STAThead

时间:2011-02-10 08:56:36

标签: c# com .net-4.0 backgroundworker task

早上好,

我做了一个简单的dll,我使用WebBrowser控件来完成一些简单的任务。现在我想在单独的Task或BackgroundWorker中使用主UI中的方法。问题是每当我使用这些方法时,我都会得到“不STAThread”异常......我怎样才能解决这个问题?当然,在dll中没有Main()方法,我也不能将STAThread属性添加到构造函数中。

非常感谢。

1 个答案:

答案 0 :(得分:4)

好吧,要在新的STA线程中运行代码,您应该创建一个新线程并在启动之前使用Thread.SetApartmentState显式强制它成为STAThread。然后,您需要使用Control.BeginInvoke将调用封送回UI线程 - 您不想使用BackgroundWorkerTask,因为这些将使用线程池线程。

另一方面,目前尚不清楚在这种情况下这是否会有所帮助 - 如果你使用WebBrowserControl,你可能需要运行消息循环等。

“使用主UI中的方法”并不清楚你的意思。这是在正常UI线程中运行的UI的WebBrowserControl 部分吗?如果是这样,你需要将编组到来自另一个线程的线程(例如使用Control.BeginInvoke) - 而另一个线程不需要是一个STA线程来实现这一点