设备事件没有在Windows服务中触发

本文关键字:服务 Windows 事件 | 更新日期: 2023-09-27 18:06:54

我创建了一个与冲床交互的Windows服务。服务将与机器连接并获取数据。注册用户,考勤记录等)从机器。这些方法会很有效。当用户敲击机器时,会触发一个事件。所以我需要在服务中注册和创建一个事件处理程序。但在我服役时,它不会开火。我创建了一个示例Windows Form应用程序,并编写了所有相同的过程。事件将在表单应用程序中触发。我的问题是

与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)
    {
    }

设备事件没有在Windows服务中触发

我怀疑你是通过一个遗留的助手ActiveX控件与你的设备接口。大多数ActiveX控件被设计为在具有功能消息循环的STA线程上工作,并且还需要线程关联。这是你的WinForms主机应用程序提供的。

但是,这不是Windows Service的默认执行环境。因此,您需要自己创建并运行STA线程。这个问题/答案可能会进一步帮助你:

StaTaskScheduler和STA线程消息泵送

服务中的事件处理也不例外;然而,你需要特别注意任何可能的异常和阻塞函数,因为这些可能会迫使你的服务停止或阻止它响应任何东西。

我发现的方法之一,似乎工作得很好是有一个线程,你开始在你的OnStart方法等待Interrupt()Monitor.Pulse()从你的事件处理程序。然后,您的事件处理程序只需收集执行任务所需的信息并将其放入信号量中。