【问题标题】:How to permanently check If serial device connects/disconnects in UWP C#?如何在 UWP C# 中永久检查串行设备是否连接/断开连接?
【发布时间】:2020-02-12 10:43:44
【问题描述】:

我有一个在 Raspberry Pi 上的 Windows IoT 上运行的 UWP 应用程序。我必须通过 USB-Com 连接多个条码扫描仪并通过串行端口接收数据。识别设备断开或连接的最佳方法是什么?现在每个条码扫描仪都运行一个循环。如果它在等待数据时抛出异常,我知道它在物理上已断开连接。然后我尝试通过使用设备 HardwareString(包含 PID 和 VID)创建一个新的串行端口来重新连接它。如果失败,它将在无限循环中运行,试图创建一个抛出异常的串行端口,因为设备物理上已断开连接。这将一直持续到设备重新物理连接并能够创建串行端口并在其上接收数据。

有没有更优雅的方法来使用 HardwareString 永久检查特定设备?

非常感谢。

【问题讨论】:

    标签: c# uwp raspberry-pi serial-port windows-10-iot-core


    【解决方案1】:

    您可以尝试使用DeviceWatcher。 DeviceWatcher 用于动态枚举所有设备,如果在初始枚举完成后添加、删除或更改设备,您的应用程序可以收到通知。如果添加了 USB-Com,它将引发DeviceWatcher.Added Event,而移除设备时,它将引发DeviceWatcher.Removed Event。请注意,当设备断开连接时,它会引发设备移除事件,但所有待处理的操作都需要正确取消,并且需要清理所有资源。请参考EventHandlerForDevice中的以下代码。代码中的回调用于显式关闭设备,清理资源,正确处理错误,停止与断开连接的设备对话。

    private async void CloseCurrentlyConnectedDevice()
    {
        if (device != null)
        {
            // Notify callback that we're about to close the device
            if (deviceCloseCallback != null)
            {
                deviceCloseCallback(this, deviceInformation);
            }
    
            // This closes the handle to the device
            device.Dispose();
    
            device = null;
        }
    }
    

    【讨论】:

    • 谢谢,我试试看。
    • 如果您遇到任何问题,请随时告诉我。
    • 老实说,我很难专门为我的设备创建一个 DeviceWatcher,它可能会或可能不会物理连接到 Raspberry Pi。我从我在应用程序开始时反序列化的 xml 文件中获取设备的 HardwareString。但是我怎样才能创建一个只有这些信息的观察者呢?
    • 您不能仅使用该信息创建观察者,但您可以在触发添加或删除事件时通过 DeviceInformation 过滤设备。
    猜你喜欢
    • 1970-01-01
    • 2013-07-09
    • 2023-03-19
    • 2011-02-09
    • 1970-01-01
    • 2010-10-05
    • 1970-01-01
    • 2015-08-27
    • 2014-07-17
    相关资源
    最近更新 更多