我创建了一个管理应用程序。我的应用程序所做的事情之一是在插件上注册,该插件可以检测指纹读取器是否插入或拔出。该类订阅事件,如下所示:
//Subscribe to the plug, unplug and imageAcquired events from the GrFingerXCtrlClass library.
FingerXCtrlClass.SensorPlug += ReaderPlug;
FingerXCtrlClass.SensorUnplug += ReaderUnplug;
FingerXCtrlClass.ImageAcquired += ImageAcquired;
首先,当我积极开发该程序时,我开发了一个 WPF 应用程序。通过这个应用程序,我可以看到一些列表并切换一些设置,所以我确信我的服务运行良好。在这个 WPF 应用程序中,我通过实例化它来创建我的服务:
ProjectServiceLogic logic = new ProjectServiceLogic();
现在我创建了一个安装程序。因此,我有一个 ProjectService 类,用于初始化应用程序。这样做是这样的:
protected override void OnStart(string[] args)
{
log.Debug("Starting service...");
_worker = new Thread(new ThreadStart(StartService));
_worker.IsBackground = true;
_worker.Name = "ServiceThread";
_worker.SetApartmentState(ApartmentState.STA);
_worker.Start();
log.Debug("Successfully started service");
}
void StartService()
{
serviceLogic = new ProjectServiceLogic();
while (!_shutdownEvent.WaitOne(0))
{
}
}
程序安装完毕,服务启动。在调试服务时,我注意到订阅代码被执行。但是,当我插入设备时不会触发事件,而在通过 WPF 应用程序在本地运行设备时会触发事件,实例化服务逻辑。为什么现在不行了?