Windows服务中未触发设备事件

时间:2014-06-04 12:39:29

标签: c# .net events windows-services

我已经创建了一个与打孔机交互的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)
    {
    }

2 个答案:

答案 0 :(得分:1)

我怀疑您是通过传统助手ActiveX控件与您的设备连接的。大多数ActiveX控件设计用于具有功能消息循环的STA线程,并且还需要线程关联。这是您的WinForms主机应用程序提供的。

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

StaTaskScheduler and STA thread message pumping

答案 1 :(得分:0)

服务中的事件也不例外;但是,您需要特别注意任何可能的异常和阻止功能,因为这些可能会强制您的服务停止或阻止它响应任何内容。

我发现其中一种似乎运行良好的方法是让您从OnStart方法开始,从您的事件处理程序等待Interrupt()Monitor.Pulse()。然后,您的事件处理程序只需收集执行任务所需的信息并将其放入信号量。