Javascript STA COM对象中的阻塞

Javascript STA COM对象中的阻塞,javascript,internet-explorer,winapi,com,activex,Javascript,Internet Explorer,Winapi,Com,Activex,我将要编写一个具有此缺陷的控件。到底为什么这么糟糕 ActiveX控件有一个通用的 那间单线程公寓 (STA)ActiveX和COM对象必须 避免:STA COM对象无法执行 阻塞STA线程上的操作, 除非COM对象也 Windows消息。因此,如果您的 控件需要执行同步操作 阻塞操作,它需要 执行Windows消息泵时 等待阻塞操作结束 完成 我不想在阻塞时发送消息,因为这似乎会导致我的javascript以可重入方式执行。这真的很糟糕。您需要允许STA线程发送消息,因为否则,调用无法调度到

我将要编写一个具有此缺陷的控件。到底为什么这么糟糕

ActiveX控件有一个通用的 那间单线程公寓 (STA)ActiveX和COM对象必须 避免:STA COM对象无法执行 阻塞STA线程上的操作, 除非COM对象也 Windows消息。因此,如果您的 控件需要执行同步操作 阻塞操作,它需要 执行Windows消息泵时 等待阻塞操作结束 完成


我不想在阻塞时发送消息,因为这似乎会导致我的javascript以可重入方式执行。这真的很糟糕。

您需要允许STA线程发送消息,因为否则,调用无法调度到STA线程:因为单元中已经有线程(而且是单线程的,duh),没有其他线程可以进入单元,所以将消息发布到线程(隐藏)窗口是“唯一的”与STA线程通信的方式

这用于处理ORPC请求,但也用于处理不一定与COM相关的消息(即GUI消息)。通过发出阻塞调用中断消息处理,从而中断ORPC功能,并可能阻塞用户界面


有关COM的详细信息,请参见“基本COM”框。

您没有手动泵送任何东西。尝试在论坛的代码片段中使用而不是
MsgWaitForMultipleObjects
,并让COM仅发送线程间调用消息