我们使用 POS for .NET 成功运行了大约一年的应用程序。这个应用程序基本上是读取网络设备上的二维码来获取 MAC 地址。但是最近我们遇到了一个奇怪的问题:我们的应用程序没有收到一些特定的二维码。
我们确实使用 Step by Step Debugger 和 Breaking point 运行了我们的代码。大多数二维码都可以正常工作,但其他一些则根本不工作。
我的意思是Scanner.DataEvent 不会针对特定的 QRCode 触发。我们还检查了扫描仪制造商提供的 OPOS 工具(Datalogic 的 DualTest),所有数据都得到了好评。
QRCode
F09FC2F09402-q2zZ2n的 2 个示例在所有情况下都可以正常工作
18E8299096EC-qHERPC不适用于 .Net 的 POS,但可以与其他 OPOS 工具一起正常工作。
为了在下面提供更多上下文,下面是我们使用 .Net 1.4.1 的 POS 的源代码的简化版本:
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();
}
}