我正在使用一个插件,无论何时我将指纹读取器插入计算机,它都可以注册。这是由事件完成的。事件被触发,阅读器被添加到列表中。
在 Visual Studio 中运行应用程序时,一切正常。通过在 WPF UI 应用程序中实例化一个实例来“启动”该服务。
当我安装服务时(WPF UI 已断开连接,但创建了服务逻辑的一个实例并启动了一个线程),一切正常。日志显示订阅事件的初始代码正在运行。此代码如下所示:
public GriauleReader()
{
log.Debug("Loading the GrFingerLib library");
if (FingerXCtrlClass != null)
{
// Subscribe to the plug, unplug and imageAcquired events from the GrFingerXCtrlClass library.
FingerXCtrlClass.SensorPlug += ReaderPlug;
FingerXCtrlClass.SensorUnplug += ReaderUnplug;
FingerXCtrlClass.ImageAcquired += ImageAcquired;
log.Debug("Successfully registered for the events sent by a Griaule fingerprint reader.");
}
}
正如我之前所说,这在从 Visual Studio 运行时有效。当作为服务安装时,上面的代码也会被执行。不幸的是,ReaderPlug
只有在 Visual Studio(WPF 实例)中运行应用程序时才会被调用。
public override void ReaderPlug(string readerId)
{
System.Diagnostics.Debugger.Launch();
System.Diagnostics.Debugger.Break();
if (!(string.IsNullOrEmpty(readerId)))
{
if (!readerId.Equals("File"))
{
log.Debug("Reader pluggedin event of GriauleReader is received and start processing...");
// Send an event to the FingerprintReaderLogic to notify that there is new reader plugged in.
DispatchReaderPluggedInEvent(readerId, GetFingerprintReaderType());
}
}
else
{
log.Error(
"No reader id is received. Plugin event has no reader id. Plugged reader cannot be added to the system.");
}
}
我自己认为由于线程而出现了问题。也许原始线程被杀死或类似的东西。什么可能是所描述问题的原因,有没有办法检查某些线程是否存在?