符号条形码扫描器不喜欢在扫描回调中关闭

时间:2013-03-07 01:44:05

标签: c# windows-mobile compact-framework motorola

motorolla符号条形码扫描器使用委托事件函数,如果我尝试在该空间的上下文中禁用扫描程序,我会得到一个空引用异常。

如果我只是拆开扫描仪,但在功能执行之外,一切正常。

任何想法如何解决这个问题?扫描打开一个新表单,这意味着需要禁用扫描仪......

4 个答案:

答案 0 :(得分:2)

您可以在扫描仪回调功能中触发计时器。在计时器刻度回调中,您将禁用该设备。请记住,如果在计时器滴答之前再次点击扫描仪回调,则需要重置计时器。如果不这样做,可能会导致扫描仪收到数据丢失。

答案 1 :(得分:1)

是扫描仪启用属性还是实际需要将其关闭?

在我所使用的扫描仪无法关闭的项目中,我使用自己的库来抽象它们的库,并在我的库中有一个Enabled属性。然后我的班级里面只保留了真实扫描仪的实例,如果我的Enabled属性被关闭,我没有把事件提升到外面的班级。

因此,你可以在这里做类似的事情。

void ScannerCallback(object sender, EventArgse)
{
    if (Enabled)
    { 
      OnBarcodeArrived(this, EventArgs.empty);
    }
}

答案 2 :(得分:1)

保罗的想法看起来很有趣。

另一种选择是根据使用该控件的GotFocus和LostFocus事件选择的控件启用/禁用扫描仪。

一个事件可以将所有事件连接起来。

private void Control_FocusChanged(object sender, EventArgs e) {
  ScannerEnabled = ((Control)sender).Focused;
}

(你必须编写ScannerEnabled变量的代码。

Properties Window

答案 3 :(得分:0)

我强烈建议您在项目中创建扫描仪对象或该对象周围的包装器。我发现几个供应商的数据收集对象的Dispose处理是不确定的,并且更快地重新创建对象。通过使用单例,您可以避免整个问题。一个在启动时创建,一个在程序关闭时处理。