【发布时间】:2011-04-12 10:09:02
【问题描述】:
我正在开发一个嵌入了 WebBrowser 控件 (IWebBrowser2) 的 Windows 应用程序。
如果我将 COM 单元初始化为单线程,情况看起来不错:
CoInitialize(NULL);
但是,如果我将其更改为多线程:
CoInitializeEx(NULL, COINIT_MULTITHREADED);
然后它开始在所有地方失败,返回值为:
由于应用程序正在调度输入同步调用,因此无法进行传出调用。
来自对 IWebBrowser2 方法的调用。
谁能告诉我如何解决这个问题?我必须使用多线程单元作为要求。请帮忙!
【问题讨论】:
-
为什么需要使用 MTA?
-
实际上我们不太确定......该应用程序实际上同时使用了 iTunes COM 和 IWebBrowse2 COM,当我们使用 STA 时,除非我们使用 MTA,否则执行似乎是无序的。但是,MTA 似乎破坏了 IWebBrowser2。
-
你知道你可以用 STA 做多线程吗?
-
你读过这篇文章codeguru.com/cpp/com-tech/activex/apts/article.php/c5529 吗?也许你只是在解决错误的问题。
标签: windows multithreading visual-c++ com iwebbrowser2