我创建了一个将与打洞机交互的 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)
{
}
最佳答案
我怀疑您是通过旧式助手 ActiveX 控件与您的设备连接的。大多数 ActiveX 控件设计为在具有功能性消息循环的 STA 线程上工作,并且还需要线程关联。这就是您的 WinForms 主机应用程序所提供的。
但是,这不是 Windows Service 的默认执行环境。因此,您需要自己创建和运行 STA 线程。此问题/答案可能会进一步帮助您:
StaTaskScheduler and STA thread message pumping
关于c# - 设备事件未在 Windows 服务中触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24037696/