1

USB スキャナーからバーコードを読み取るアプリがあります。バーコードが特定のテキスト ボックスに入力されるとすぐに DB ルックアップを実行したいと考えています。

明らかに、コードを TextChanged イベント ハンドラーに配置しますが、読み取られるバーコードが 41 文字または 43 文字になる可能性があるという小さな問題があります。問題は、どのタイプのコードが入力されているかをどうやって知るかということです。スキャナーは、キーボードから入力されたかのように、フォーカスのあるフィールドにコードを文字列として入力するだけなので、スキャナーにクエリを実行してコードの長さを判断することはできません。

これまでのところ、2つのアプローチを考えてきました。

  • 最初の文字を検出し、xx 秒待ってからルックアップを実行します - 完全なコードを入力するのに十分な時間を取ってください
  • 41 番目の文字を検出し、0.x 秒待ってからルックアップを実行します。

OK、これらは問題なく動作すると確信していますが、他に雄弁な解決策はありますか?

結論

いくつかの有用な提案がありますが、Ondrej は私のシナリオの最も簡単な解決策に影響を与えました。43 文字のコードには、すべてのコードで固定されている 2 つの文字があります。これらの 2 つの文字が存在する (または存在しない) ということは、これらの 2 つの文字が存在する場合に待機する必要があることを意味しますが、存在するのは 41 文字のみです。

41 文字コードでは、この特定の位置にこの文字のペアを含めることはできないという疑いを確認する必要があります。これは事実であると確信しています。

4

3 に答える 3

2

1つのオプションは、UIスレッドでさらに2文字を待機しながら、41番目の文字が読み取られた後に非同期ルックアップを実行することです。そのバーコードにヒットした場合は、待機を停止してその結果を表示できます。または、ルックアップの進行中に42番目の文字が入力された場合は、それを中止して、43番目の文字が入力されたときにすぐに新しいルックアップを開始できます。ただし、これは、43文字のバーコードが既存の41文字のバーコードで始まらないことを前提としています。

また、バーコードに何らかのパターンが含まれているかどうかを確認し(たとえば、41文字のコードには9番目の文字としてXがあり、43文字のコードにはない)、入力時にスキャンします。

于 2011-04-12T16:19:31.467 に答える
1

バックグラウンド ワーカー クラスで DB ルックアップ呼び出しをラップします。
TextChanged イベント ハンドラーで最初に行うことは、バックグラウンド ワーカーが動作している場合はキャンセルすることです。次に、テキストの長さが 41 または 43 の場合は、バックグラウンド ワーカーで DB 呼び出しを処理します。

このようにして、ユーザーが 41 文字をヒットすると呼び出しが発生し、42 文字目を入力すると呼び出しはキャンセルされますが、43 文字を入力した場合は 2 文字を削除します (41 文字に戻すため)。適切なルックアップを行っています。

于 2011-04-12T16:30:32.387 に答える
1

タイマーを設定し、たとえば 1 秒間変更が発生していない間に、長さが 41 または 43 文字である場合にルックアップを行うことができます。

于 2011-04-12T16:11:12.297 に答える