首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UWP BarcodeScanner DataRecieved事件在WPF应用程序中未触发

UWP BarcodeScanner DataRecieved事件在WPF应用程序中未触发
EN

Stack Overflow用户
提问于 2020-07-13 21:39:55
回答 2查看 466关注 0票数 0

我有一个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样本几乎相同:-

代码语言:javascript
运行
复制
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");
}
代码语言:javascript
运行
复制
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应用程序那样获得事件有关。

这里有什么东西我遗漏了吗?

EN

回答 2

Stack Overflow用户

发布于 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月完成,所以最好改用微软的这款产品。

Windows 10 WinRT API包发布

Microsoft.Windows.SDK.Contracts 10.0.19041.1

版本自适应码

桌面应用程序可用的Windows运行时API

.NET 5将于今秋或冬季发布,其机制将发生变化。

在WinRT 5 #35318中支持.NET API

C#/WinRT

票数 0
EN

Stack Overflow用户

发布于 2020-07-14 22:57:19

一个非常基本的编程错误。

在复制UWP示例代码时,我没有意识到我已经在本地将claimedBarcodeScanner对象限定为初始化方法。

初始化方法完成后,引用就丢失了,没有捕获任何事件。

感谢kunif给出的重要建议:“用编写良好的WPF应用程序而不是控制台应用程序来尝试它是有意义的。”

...and I可以确认,这个POS库使用的是.NET框架、net核心框架和UWP。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62884686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档