代码之家  ›  专栏  ›  技术社区  ›  Mike

尝试处理ActiveX事件时出错

  •  0
  • Mike  · 技术社区  · 14 年前

    我有两个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 回复  |  直到 14 年前
        1
  •  0
  •   Hans Passant    14 年前

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