我已经创建了一个与打孔机交互的Windows服务。该服务将与机器连接并从机器上获取数据(例如注册用户,考勤记录等)。这些方法可以正常工作当用户打机时会发生一个事件。所以我需要在服务中注册并创建一个事件处理程序事件。但在我的服务中,它不会被解雇。我创建了一个示例Windows窗体应用程序并编写了所有相同的过程。该事件将在表单应用程序中触发。我的问题是
与Windows窗体应用程序相比,为Windows服务注册和创建事件处理程序有什么区别吗?
请帮帮我。
AxLxInterface.SocketInitialize();
AxLxInterface.WorkIndex = 0;
AxLxInterface.CardEvent += AxLxInterface_CardEvent; //event registration(but won't fire
AxLxInterface.SocketConnect(serverIp, serverPort); //will connect successfully
AxLxInterface.DateTimeRead(); //will give the machine date time
AxLxInterface.PollingStart(000, 000);
事件处理程序
public void AxLxInterface_CardEvent(object sender, _DLxInterfaceEvents_CardEventEvent e)
{
}
答案 0 :(得分:1)
我怀疑您是通过传统助手ActiveX控件与您的设备连接的。大多数ActiveX控件设计用于具有功能消息循环的STA线程,并且还需要线程关联。这是您的WinForms主机应用程序提供的。
但是,这不是Windows服务的默认执行环境。因此,您需要自己创建并运行STA线程。这个问题/答案可能会进一步帮助您:
答案 1 :(得分:0)
服务中的事件也不例外;但是,您需要特别注意任何可能的异常和阻止功能,因为这些可能会强制您的服务停止或阻止它响应任何内容。
我发现其中一种似乎运行良好的方法是让您从OnStart
方法开始,从您的事件处理程序等待Interrupt()
或Monitor.Pulse()
。然后,您的事件处理程序只需收集执行任务所需的信息并将其放入信号量。