尝试处理ActiveX事件时出错

时间:2010-09-17 19:24:17

标签: c# com activex

我需要两个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 个答案:

答案 0 :(得分:0)

这是一个线程问题。您应该向组件供应商寻求帮助,听起来他们没有正确设置ThreadingModel注册表项。但是你可能得到的回应是“不要从工作线程中使用它们,只能从STA线程中使用它们”。这对于ActiveX控件来说非常常见。