1

我有一个从 USB 扫描仪读取条形码的应用程序。我想在特定文本框中输入条形码后立即进行数据库查找。

显然,我将把我的代码放在 TextChanged 事件处理程序中,但我有一个小问题,因为正在读取的条形码可能是 41 或 43 个字符。问题是,我怎么知道正在输入哪种类型的代码。扫描仪只需将代码作为字符串输入任何具有焦点的字段 - 就好像它是通过键盘输入的一样 - 所以我无法查询扫描仪以确定代码长度。

到目前为止,我已经想到了两种方法:

  • 检测第一个字符,等待 xx 秒,然后进行查找 - 留出足够的时间输入完整代码
  • 检测第 41 个字符,等待 0.x 秒,然后进行查找。

好的,我相信这些都可以正常工作,但是还有更雄辩的解决方案吗?

结论

一些有用的建议,但是 Ondrej 为我的场景激发了最简单的解决方案。43 个字符代码有两个对于所有代码都是固定的字符 - 这两个字符的存在(或不存在)意味着我知道如果这两个字符存在但只有 41 个字符存在,则等待。

我只需要确认我的怀疑,即 41 个字符代码不能在这个特定位置有这对字符 - 我很确定是这种情况。

4

3 回答 3

2

一种选择是在读取第 41 个字符后执行异步查找,同时仍在 UI 线程中等待另外两个字符。如果您在该条码上被击中,您可以停止等待并显示该结果。或者,如果在查找过程中输入了第 42 个字符,您可以中止它并在输入第 43 个字符时立即开始新的查找。但是,这假设没有 43 个字符的条码以现有的 41 个字符的条码开头。

我还会查看条形码是否包含某种模式(例如:41 字符代码的第 9 个字符有 X,而 43 字符代码没有),并在输入时扫描它。

于 2011-04-12T16:19:31.467 回答
1

你可以有一个计时器,虽然说 1 秒没有发生任何变化,但如果它的长度为 41 或 43 个字符,则进行查找。

于 2011-04-12T16:11:12.297 回答
1

我会将数据库查找调用包装在后台工作人员类中。
在 TextChanged 事件处理程序上,我要做的第一件事是如果后台工作人员正在工作,我会取消它。然后,如果文本长度为 41 或 43,我将在后台工作程序中处理数据库调用。

这样,如果用户输入 41 个字符,呼叫就会发生,如果他们输入第 42 个字符,呼叫将被取消,但是如果他们输入 43,然后删除两个字符(以恢复到 41 个字符),您仍然会进行正确的查找。

于 2011-04-12T16:30:32.387 回答