尝试处理 ActiveX 事件时出错
Posted
技术标签:
【中文标题】尝试处理 ActiveX 事件时出错【英文标题】:Getting error when trying to handle ActiveX event 【发布时间】:2010-09-17 19:24:16 【问题描述】:我有两台 ActiveX 服务器需要处理它的事件。 第一个我可以毫无问题地工作,但是第二个我在尝试分配新事件时遇到错误。运行代码的代码如下:
public delegate void ICwGetXEvents_OnCommandExEventHandler(uint CommandW, uint CommandL, string CommandText);
public CwGet.CwGetXClass ax_CwGet;
//event
public void CwGetXEvents_OnCommandExEventHandler(uint CommandW, uint CommandL, string CommandText)
if (CommandL == 4)
//some code
//ok here is how I assign the controls and event:
ax_CwGet = new CwGetXClass();
ax_CwGet.OnCommandEx += CwGetXEvents_OnCommandExEventHandler;
好的,第二个控件(它是由同一家公司创建的)我尝试同样的事情:
public delegate void ITrueTtyXEvents_OnCallsignEventHandler(string Call);
public truetty.TrueTtyXClass ax_truetty;
//event
public void TrueTtyXEvents_OnCallsignEventHandler(string Call)
//somecode
ax_truetty = new TrueTtyXClass();
ax_truetty.OnCallsign+= TrueTtyXEvents_OnCallsignEventHandler;
但是,当我创建新的 ActiveX 对象时,它可以工作,但是当我去分配事件时,我得到了这个错误:
“由于应用程序正在调度输入同步调用,因此无法进行传出调用。(来自 HRESULT 的异常:0x8001010D (RPC_E_CANTCALLOUT_ININPUTSYNCCALL))”
想知道是否有人能指出我正确的方向..
迈克
【问题讨论】:
【参考方案1】:这是一个线程问题。您应该向组件供应商寻求帮助,听起来他们没有正确设置 ThreadingModel 注册表项。但是您可能会得到的响应是“不要从工作线程中使用它们,而只能从 STA 线程中使用它们”。这对于 ActiveX 控件很常见。
【讨论】:
以上是关于尝试处理 ActiveX 事件时出错的主要内容,如果未能解决你的问题,请参考以下文章