2011-02-10 40 views
2

早上好,用于任务/ BackgroundWorker的DLL的STAThead

我做了一个简单的dll,其中我使用WebBrowser控件来完成一些简单的任务。现在我想在一个单独的Task或BackgroundWorker的主UI中使用它的方法。问题是,只要我使用这些方法,我会得到“no STAThread”的例外......我该如何解决这个问题?当然,在DLL中没有Main()方法,我也不能将STAThread属性添加到构造函数中。

非常感谢。

+0

+1“早上好”部分有点有趣,因为它在我的时区是12:59 AM。 :) – Mehrdad 2011-02-10 08:59:17

+0

大声笑。对我来说是9AM。 – Miguel 2011-02-10 09:00:51

回答

4

那么,要让代码在新的STA线程中运行,您应该创建一个新线程,并在启动之前明确强制它使用Thread.SetApartmentState作为STAThread。然后您需要使用Control.BeginInvoke将调用回传给UI线程 - 您不想使用BackgroundWorkerTask,因为那些线程将使用线程池线程。

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

这真不明白你的意思“使用主UI中的方法”。这是在正常的UI线程中运行的UI的WebBrowserControl 部分?如果是这样的话,你需要编组,这个线程来自另一个线程(例如使用Control.BeginInvoke) - 而另一个线程不需要是一个STA线程。