2010-09-14 39 views
2

我正在開發一個嵌入了WebBrowser控件(IWebBrowser2)的Windows應用程序。IWebBrowser2和多線程的公寓?

事情看起來好,如果我初始化COM公寓作爲單線程:

CoInitialize(NULL); 

但是,如果我將其更改爲多線程:

CoInitializeEx(NULL, COINIT_MULTITHREADED); 

然後開始失效與各地的地方返回值:

由於應用程序正在調度輸入同步調用,因此無法進行傳出呼叫。

從調用IWebBrowser2的方法。

有人可以告訴我怎麼解決這個問題嗎?我必須使用多線程的公寓作爲要求。請幫忙!

+0

到底爲什麼你需要使用MTA? – sharptooth 2010-09-15 05:04:38

+0

其實我們並不確定...應用程序實際上同時使用了iTunes COM和IWebBrowse2 COM,當我們使用STA時,除非我們使用MTA,否則執行看起來不順暢。但是,MTA似乎打破了IWebBrowser2。 – TopQ 2010-09-15 08:26:34

+0

你知道你可以用STA做多線程嗎? – wqw 2010-09-15 17:26:02

回答

3

無法初始化多線程單元可視ActiveX控件。

理論上,您可以創建一個單獨的線程,將其初始化爲STA,在那裏創建IWebBrowser2接口,並使用CoMarshalInterThreadInterfaceInStream/CoGetInterfaceAndReleaseStream將其封送到MTA線程。然而,這很令人討厭,我不建議嘗試一下,如果你想以完整的理智逃脫。

我花了好幾天在看這個確切的問題和厭惡(和使用鉻嵌入式框架,而不是因爲它發生)放棄了。

工作,你是否真的需要使用MTA。你可能沒有機會,你只是在iTunes上做錯了什麼。

+0

我也放棄了試圖讓它在MTA中工作。感謝提到Chromium嵌入式框架,因爲我沒有任何線索,我們實際上有另一種選擇它與IWebBrowser2在你的意見中相比如何?謝謝。 – TopQ 2010-10-19 17:51:39

+0

到目前爲止,出色。這取決於你正在嘗試使用它。 IWebBrowser2公開了很多在Chromium不支持的場景中播放的功能。 Chromium還爲您的應用程序佔用空間增加了23MB的dll,而IWebBrowser2隨Windows一起提供。我發現唯一缺乏的是無法手動設置縮放級別。 – JamesT 2010-10-20 12:51:01

-1

我花了整整一個星期,嘗試這些STAMTA,給up.Instead還有一個更簡單approach.Use系統(「call iexplore.exehttp://www.example.com」);內 一個button_click method.This方法工作beatifully.Only問題是這會在Web瀏覽器上的單獨 tag.I認爲由微軟研究人員創建了這些併發症或故意(或白癡),以便我們一直都是以圓形和記得微軟我們編碼的每一種方法。 問候 kvinvisibleguy

相關問題