【问题标题】:POS for .NET - Scanner - What could cause some QR code to not trigger DataEvent while other does?.NET 的 POS - 扫描仪 - 什么可能导致某些二维码不触发 DataEvent 而其他二维码触发?
【发布时间】:2019-10-31 18:57:03
【问题描述】:

我们使用 POS for .NET 成功运行了大约一年的应用程序。这个应用程序基本上是读取网络设备上的二维码来获取 MAC 地址。但是最近我们遇到了一个奇怪的问题:我们的应用程序没有收到一些特定的二维码。

我们确实使用 Step by Step Debugger 和 Breaking point 运行了我们的代码。大多数二维码都可以正常工作,但其他一些则根本不工作。
我的意思是 Scanner.DataEvent 不会针对特定的 QRCode 触发。我们还检查了扫描仪制造商提供的 OPOS 工具(Datalogic 的 DualTest),所有数据都得到了好评。

二维码的 2 个示例
F09FC2F09402-q2zZ2n 在所有情况下都有效
18E8299096EC-qHERPC 不适用于 .Net 的 POS,但可以正常工作与其他 OPOS 工具。

为了在下面提供更多上下文,下面是我们使用 POS for .Net 1.4.1 的简​​化版本的源代码:

public class CodeScanner 
{
    public event Action<String> DataReceived;
    private Microsoft.PointOfService.Scanner _scanner;

    public Boolean Connect() 
    {
       Microsoft.PointOfService.PosExplorer posExplorer = new Microsoft.PointOfService.PosExplorer(); //null reference if POS .net is not installed
       Microsoft.PointOfService.DeviceInfo device = null;
       foreach (Microsoft.PointOfService.DeviceInfo d in posExplorer.GetDevices(DeviceType.Scanner))
       {
           if (d.ServiceObjectName == "RS232Imager")
           {
                device = d;
           }
       }

       _scanner = (Microsoft.PointOfService.Scanner)posExplorer.CreateInstance(device);
       _scanner.Open();
       _scanner.Claim(1000);
       _scanner.DataEvent += Scanner_DataEvent;
       _scanner.DeviceEnabled = true;
       _scanner.DataEventEnabled = true;
       _scanner.DecodeData = true;

       return true;
    }

    private void Scanner_DataEvent(Object sender, DataEventArgs e)
    {
        String data = System.Text.Encoding.UTF8.GetString(_scanner.ScanData);
        Task.Run(() => DataReceived?.Invoke(data));
        _scanner.DataEventEnabled = true;
        _scanner.ClearInput();
    }
}

【问题讨论】:

  • “Claim”属性到底是干什么用的?
  • @Fildor :它执行请求以获取对设备的独占访问权限。这是 OPOS 设备的一种仪式(不特定于 .Net 的 POS)。值“1000”是以毫秒为单位的超时。之后它失败了。
  • 好的,谢谢。我的怀疑是识别质量可能存在一些过滤器。但情况似乎并非如此。
  • 你有没有试过实现_scanner.ErrorEvent += Scanner_ErrorEvent;并检查是否有错误?
  • @Ardit : 是的,ErrorEvent 目前在完整的代码源中实现,扫描“不工作”的 QR 码 18E8299096EC-qHRPC 时没有发生任何事情。

标签: c# pos-for-.net


【解决方案1】:

最后我放弃了 Pos for .Net,将扫描仪用作键盘输入,并相应地重构了我的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多