Multithreading 为什么我的ActiveX冻结IE标签,而flash等其他东西却没有?

Multithreading 为什么我的ActiveX冻结IE标签,而flash等其他东西却没有?,multithreading,flash,internet-explorer,activex,Multithreading,Flash,Internet Explorer,Activex,通过引用,我也像作者一样编写了一个Active,当activex做了一些事情时,整个IE都冻结了。不能选择其他选项卡,也不能关闭包含activex的选项卡 我知道我可以编写一些线程代码来完成这项工作。然而,我的问题是,其他activex,如Flash或Silverlight,它们是如何解决的?我不相信他们所有的工作都是异步完成的,也许他们所有的工作都很短,所以我们从来没有注意到延迟 欢迎任何建议。谢谢。您不能在IE的UI线程上执行长时间运行的操作,否则该选项卡将挂起。UI线程是您的控件实例化的线

通过引用,我也像作者一样编写了一个Active,当activex做了一些事情时,整个IE都冻结了。不能选择其他选项卡,也不能关闭包含activex的选项卡

我知道我可以编写一些线程代码来完成这项工作。然而,我的问题是,其他activex,如Flash或Silverlight,它们是如何解决的?我不相信他们所有的工作都是异步完成的,也许他们所有的工作都很短,所以我们从来没有注意到延迟


欢迎任何建议。谢谢。

您不能在IE的UI线程上执行长时间运行的操作,否则该选项卡将挂起。UI线程是您的控件实例化的线程;它调用的是
IObjectWithSite::SetSite()
。你在做什么工作?长时间运行的操作包括文件处理、HTTP请求以及任何涉及获取任何类型锁的操作


你关于Flash如何工作的猜测也是错误的;Flash确实使用多线程

但是如果我使用一个活动的文档服务器,比如在IE中查看.pdf文件,那么活动的文档服务器就会停止运行。如果单击文档中的按钮(仍挂起)。为什么?仅仅因为某件事情超出了流程并不意味着它没有阻塞。我的猜测是,进程中的任何位都被阻塞,等待另一个进程。这很难。