2011-02-10 38 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線程。