モトローラ シンボル バーコード スキャナーはデリゲート イベント関数で動作します。そのスペースのコンテキスト内でスキャナーを無効にしようとすると、null 参照例外が発生します。
単純にスキャナーを無効にすると、その関数の実行以外ではすべて正常に動作します。
これを回避する方法はありますか?スキャンは新しいフォームを開きます。つまり、スキャナーを無効にする必要があります...
モトローラ シンボル バーコード スキャナーはデリゲート イベント関数で動作します。そのスペースのコンテキスト内でスキャナーを無効にしようとすると、null 参照例外が発生します。
単純にスキャナーを無効にすると、その関数の実行以外ではすべて正常に動作します。
これを回避する方法はありますか?スキャンは新しいフォームを開きます。つまり、スキャナーを無効にする必要があります...
スキャナーのコールバック関数でタイマーをトリガーできます。タイマー ティック コールバックで、デバイスを無効にします。タイマーが刻む前にスキャナーのコールバックが再びヒットした場合は、タイマーをリセットする必要があることに注意してください。そうしないと、スキャナーから受信したデータが失われる可能性があります。
ポールの考えは面白そうだ。
もう1つのオプションは、そのコントロールのGotFocusイベントとLostFocusイベントを使用して選択されたコントロールに基づいて、スキャナーを有効/無効にすることです。
1つのイベントですべてをつなぐことができます。
private void Control_FocusChanged(object sender, EventArgs e) {
ScannerEnabled = ((Control)sender).Focused;
}
ScannerEnabled
(ただし、その変数をコーディングする必要があります。
スキャナーの有効化はプロパティですか、それとも実際にオフにする必要がありますか?
私が使用していたスキャナーをオフにできなかったプロジェクトでは、自分のライブラリーを自分のライブラリーで抽象化し、ライブラリーに Enabled プロパティを設定しました。次に、クラス内で実際のスキャナーのインスタンスを操作可能な状態に保ち、Enabled プロパティがオフになっている場合は、外部クラスにイベントを発生させませんでした。
したがって、ここで同様のことができる場合があります。
void ScannerCallback(object sender, EventArgse)
{
if (Enabled)
{
OnBarcodeArrived(this, EventArgs.empty);
}
}
スキャナー オブジェクト、またはそのオブジェクトのラッパーをプロジェクトのシングルトンとして作成することを強くお勧めします。私は、いくつかのベンダーでのデータ収集オブジェクトの Dispose 処理が不安定であり、オブジェクトの迅速な再作成がさらに不安定であることを発見しました。シングルトンを使用することで、問題全体を回避できます。1 つは起動時に作成し、もう 1 つはプログラムのシャットダウン時に破棄します。