0

我正在使用一个插件,无论何时我将指纹读取器插入计算机,它都可以注册。这是由事件完成的。事件被触发,阅读器被添加到列表中。

在 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.");
    }
}

我自己认为由于线程而出现了问题。也许原始线程被杀死或类似的东西。什么可能是所描述问题的原因,有没有办法检查某些线程是否存在?

4

0 回答 0