我有一个WPF销售点应用程序,我最近从net48移植到netcore3.1 (多么好的工作!)在这个应用程序中,我使用霍尼韦尔旅行者1200 g通过POS4NET服务对象(HHSO4NET.dll)扫描简单的条形码,一切都很好。然而,在新的netcore3.1世界,我无法再打开设备。我发现了以下错误:-
找不到`Microsoft.Pointofservice.management.Explorer方法的类型初始化程序:'Void `Microsoft.Pointofservice.management.Explorer
我推测,在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应用程序那样获得事件有关。
这里有什么东西我遗漏了吗?
发布于 2020-07-14 12:11:04
根据评论中的对话重写:
附于该问题条款的下列评论似乎是有效的。
顺便问一下,这个(Windows.Devices.PointOfService)是否可以自然地与.NET 4.8WPF(从不UWP)而不是.NET核心一起工作?如果它不适用于.NET 4.8WPF,那么它可能在.NET核心中就不能工作了。通过这样的小变化一点一点地进行调查会更好。
也许它只是在重复同样的情况。但是,使用编写良好的WPF应用程序而不是控制台应用程序来尝试它是有意义的。
这可能是因为您没有在claimedBarcodeScanner.IsDecodeDataEnabled = true;
事件处理程序中执行DataReceived。数据在条形码扫描器服务中缓冲,而不为真。这将与POS、DataEventEnabled、for.NET和OPOS的for.NET属性相同。
附注:
请注意,对前一篇文章的评论将被删除。
另一方面,问题文章中提到的NuGet包是由第三方制作的,并于2016年11月完成,所以最好改用微软的这款产品。
Microsoft.Windows.SDK.Contracts 10.0.19041.1
.NET 5将于今秋或冬季发布,其机制将发生变化。
发布于 2020-07-14 22:57:19
一个非常基本的编程错误。
在复制UWP示例代码时,我没有意识到我已经在本地将claimedBarcodeScanner对象限定为初始化方法。
初始化方法完成后,引用就丢失了,没有捕获任何事件。
感谢kunif给出的重要建议:“用编写良好的WPF应用程序而不是控制台应用程序来尝试它是有意义的。”
...and I可以确认,这个POS库使用的是.NET框架、net核心框架和UWP。
https://stackoverflow.com/questions/62884686
复制相似问题