參考this FsEye問題,如何使用反射來確定某個對象是否需要其成員(或者確實是可能的特定成員)被調用在GUI線程?使用反射來確定某個對象是否需要在GUI線程上調用其成員
這種情況是:用戶在FSI(運行自己的WinForms事件循環)內創建WebBrowser
對象的實例,然後嘗試展開FsEye中的節點。但是,這會導致未處理的異常對話框,警告
System.Threading.ThreadStateException:當前線程必須設置爲 單線程單元(STA)模式OLE呼叫可才製成。 確保您的Main函數具有標記的STAThreadAttribute。
(特別是在加載AccessibilityObject屬性時出現這種情況)。
我知道這是因爲FsEye載荷子懶惰地節點,異步,並且並行使用具有Async.Parallel
F#異步計算式並因此調用從非原始的,非STA(此OLE對象的成員,即不原始的FSI GUI線程)線程池線程。我也知道如何通過在我的異步表達式中切換到GUI線程上下文來解決這個問題,但我只想在絕對必要時這樣做。
確實['InvokeRequired'派生, ](http://msdn.microsoft.com/en-us/library/system.windows.forms.control.invokerequired.aspx)的幫助? – Daniel 2012-04-12 15:14:16
@Daniel,我不這麼認爲,那隻會告訴他他不在UI線程中......他知道他不在UI線程中,他想知道這裏的這個隨機對象是否需要使用UI線程來評估自己。 – Brian 2012-04-12 18:29:12