【发布时间】: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