指紋リーダーをコンピューターに接続するかどうかに関係なく、いつでも登録できるプラグインを使用しています。これはイベントによって行われています。イベントがトリガーされ、リーダーがリストに追加されます。
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.");
}
}
私自身、スレッドのせいで何かがおかしいと思っています。おそらく、元のスレッドが殺されているか、そのようなものです。説明されている問題の原因は何でしょうか。また、特定のスレッドが生きているかどうかを確認する方法はありますか?