我正在使用与生物识别考勤设备一起工作的考勤软件。该设备的供应商提供了一个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来处理事件?如果是的话,他们的任何工作呢?
在此先感谢。
是的,这是那种COM对象的要求[STA线程](http://stackoverflow.com/a/21684059/17034)。 –
检查[this](http://stackoverflow.com/q/21438747/1768303)和[this](http://stackoverflow.com/q/18296834/1768303)。 – Noseratio