2015-10-13 67 views
1

我正在使用与生物识别考勤设备一起工作的考勤软件。该设备的供应商提供了一个COM类库“zemkeeper”,您必须注册并链接到它。Windows服务中的COM对象的事件处理

在演示中,他们提供了他们在GUI winform应用程序中使用它,它的工作原理和它也适用于我。

zkemkeeper.CZKEMClass axCZKEM1 = new zkemkeeper.CZKEMClass(); 
bool bIsConnected = axCZKEM1.Connect_Net(txtIP.Text, Convert.ToInt32(txtPort.Text)); 

if (bIsConnected == true) 
      { 
       btnConnect.Text = "DisConnect"; 
       btnConnect.Refresh(); 
       lblState.Text = "Current State:Connected"; 
       iMachineNumber = 1;//In fact,when you are using the tcp/ip communication,this parameter will be ignored,that is any integer will all right.Here we use 1. 
       if (axCZKEM1.RegEvent(iMachineNumber, 65535))//Here you can register the realtime events that you want to be triggered(the parameters 65535 means registering all) 
       { 
        this.axCZKEM1.OnFinger += new zkemkeeper._IZKEMEvents_OnFingerEventHandler(axCZKEM1_OnFinger); 
        ... 
       } 
      } 
      else 
      { 
       axCZKEM1.GetLastError(ref idwErrorCode); 
       MessageBox.Show("Unable to connect the device,ErrorCode=" + idwErrorCode.ToString(), "Error"); 
      } 
} 

但是,当我试图建立一个Windows服务注册的事件根本不会触发。我试图使用控制台应用程序做同样的事情,但它也不起作用。

什么问题?这种类型的COM对象是否需要GUI来处理事件?如果是的话,他们的任何工作呢?

在此先感谢。

+1

是的,这是那种COM对象的要求[STA线程](http://stackoverflow.com/a/21684059/17034)。 –

+0

检查[this](http://stackoverflow.com/q/21438747/1768303)和[this](http://stackoverflow.com/q/18296834/1768303)。 – Noseratio

回答