早上好,用于任务/ BackgroundWorker的DLL的STAThead
我做了一个简单的dll,其中我使用WebBrowser控件来完成一些简单的任务。现在我想在一个单独的Task或BackgroundWorker的主UI中使用它的方法。问题是,只要我使用这些方法,我会得到“no STAThread
”的例外......我该如何解决这个问题?当然,在DLL中没有Main()
方法,我也不能将STAThread
属性添加到构造函数中。
非常感谢。
早上好,用于任务/ BackgroundWorker的DLL的STAThead
我做了一个简单的dll,其中我使用WebBrowser控件来完成一些简单的任务。现在我想在一个单独的Task或BackgroundWorker的主UI中使用它的方法。问题是,只要我使用这些方法,我会得到“no STAThread
”的例外......我该如何解决这个问题?当然,在DLL中没有Main()
方法,我也不能将STAThread
属性添加到构造函数中。
非常感谢。
那么,要让代码在新的STA线程中运行,您应该创建一个新线程,并在启动之前明确强制它使用Thread.SetApartmentState
作为STAThread。然后您需要使用Control.BeginInvoke
将调用回传给UI线程 - 您不想使用BackgroundWorker
或Task
,因为那些线程将使用线程池线程。
在另一方面,目前还不清楚是否会在这种情况下帮助 - 如果您使用的是WebBrowserControl
你可能需要运行的消息循环等
这真不明白你的意思“使用主UI中的方法”。这是在正常的UI线程中运行的UI的WebBrowserControl 部分?如果是这样的话,你需要编组到,这个线程来自另一个线程(例如使用Control.BeginInvoke
) - 而另一个线程不需要是一个STA线程。
+1“早上好”部分有点有趣,因为它在我的时区是12:59 AM。 :) – Mehrdad 2011-02-10 08:59:17
大声笑。对我来说是9AM。 – Miguel 2011-02-10 09:00:51