windows服务中COM对象的事件处理

本文关键字:事件处理 对象 COM 服务 windows | 更新日期: 2023-09-27 18:17:24

我正在研究一个与生物识别考勤设备一起工作的考勤软件。设备的供应商提供了一个COM类库"zemkeeper",您必须注册并链接到它。

在他们提供的演示中,他们在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来处理事件吗?如果是,他们有什么工作要做吗?

windows服务中COM对象的事件处理

我也有同样的问题。我终于找到了解决办法。您需要为此创建STA线程。查看以下链接

如果你的项目是Windows Application,你不需要这样做。因为STA主线程调用application . run (form)运行表单。查看以下链接

在Windows Service c#中引发自定义类事件

http://www.codeproject.com/Questions/711973/Using-Zkemkeeper-dll-from-SDK-for-Biometric-scanne