早上好,用於任務/ 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