我有一个 WPF 销售点应用程序,我最近将它从 net48 移植到 netcore3.1(真是太棒了!)。在应用程序中,我通过 POS4NET 服务对象 (HHSO4NET.dll) 使用 Honeywell Voyager 1200g 扫描简单的条形码,一切都很好。然而在新的netcore3.1世界里,我再也无法打开设备了。我收到以下错误:-
`Microsoft.Pointofservice.management.Explorer 的类型初始化程序
找不到方法:“无效 System.AppDomainSetup.set_ApplicationBase(System.String)”。
我认为在 dotnet 核心运行时中有一些东西现在在网络框架中不可用。所以,我决定在 UWP 世界中寻找 Windows.Devices.PointOfService 来帮助我集成扫描仪(这是一个受支持的模型)。
为了能够引用这些 UWP 库,我遵循了以下指南,其中描述了添加一些额外的引用
https://blogs.windows.com/windowsdeveloper/2017/01/25/calling-windows-10-apis-desktop-application/
现在我可以找到、认领和打开扫描仪了!但似乎没有处理任何事件。我的代码几乎与 UWP 示例相同:-
string selector = BarcodeScanner.GetDeviceSelector();
DeviceInformationCollection deviceCollection = await DeviceInformation.FindAllAsync(selector);
var device = deviceCollection.FirstOrDefault();
if (device != null)
{
barcodeScanner = await BarcodeScanner.FromIdAsync(device.Id);
if (barcodeScanner != null)
{
//after successful creation, claim the scanner for exclusive use
var claimedBarcodeScanner = await barcodeScanner.ClaimScannerAsync();
if (claimedBarcodeScanner != null)
{
//Subscribe to the events
claimedBarcodeScanner.ReleaseDeviceRequested += ClaimedBarcodeScanner_ReleaseDeviceRequested;
claimedBarcodeScanner.DataReceived += WhenScannerDataReceived;
claimedBarcodeScanner.IsDecodeDataEnabled = true;
//after successful claim, enable scanner for data events to fire
await claimedBarcodeScanner.EnableAsync();
}
else
{
FrameworkDI.Logger.LogErrorSource("Failure to claim barcodeScanner");
}
}
else
{
FrameworkDI.Logger.LogErrorSource("No Barcode Scanner Present");
}
}
else
{
FrameworkDI.Logger.LogErrorSource("No Barcode Scanner Present");
}
private void WhenScannerDataReceived(object sender, DataEventArgs args)
{
string symbologyName = BarcodeSymbologies.GetName(args.Report.ScanDataType);
var scanDataLabelReader = DataReader.FromBuffer(args.Report.ScanDataLabel);
string barcode = scanDataLabelReader.ReadString(args.Report.ScanDataLabel.Length);
}
在处理程序中有一个断点,我似乎无法命中该事件。我下载了 UWP 示例应用程序并使用同一台机器/扫描仪运行它,它捕获了所有事件并很好地读取了数据,所以我假设扫描仪正在发出事件。它一定与 WPF 应用程序没有以与 UWP 应用程序以某种方式相同的方式获取事件有关。
我在这里缺少什么吗?