gpt4 book ai didi

uwp - 蓝牙LE设备无法在Win 10 IoT UWP应用程序中断开连接

转载 作者:行者123 更新时间:2023-12-02 17:01:59 26 4
gpt4 key购买 nike

我试图控制在Raspberry Pi 3 SBC上运行的Win 10 IoT UWP C#应用程序中的蓝牙LE设备连接/断开连接。 Win 10 IoT是Windows Insiders Preview内部版本10.0.17035.1000。当我启动应用程序时,它会识别出广告BLE设备,并成功连接并与其通信。然后,我尝试通过建议的步骤断开此设备的连接:

device.Dispose();

设备=空;

GC.Collect();

甚至停止并重新启动BluetoothLEAdvertisementWatcher。但是,当此设备再次开始投放广告时,则无法识别。据我所知,其原因是该设备实际上并未断开连接(尽管它显示为断开连接状态)或某些连接信息仍在等待处理,这阻止了该设备在新广告中被识别。

即使我不执行上述步骤,也无法识别新的设备广告(来自相同或其他BLE设备),并且在两种情况下,唯一的办法是重新启动Win 10 IoT并重新启动应用程序以订购新广告从相同的设备被识别。与设备的通信完成后,可以识别来自相同类型的不同设备的广告。但是,当第二设备完成通信时,无法再次识别来自它或第一设备的新广告。在调试模式下未报告任何异常或其他问题。在应用程序生产版本中,这确实是不可接受的。

请告诉我如何解决这个问题。谢谢。

最佳答案

此问题可能是由于GattDeviceService的活动会话未关闭引起的。

连接BLE设备并访问其服务和特征时,将有一个活动会话供您操作。您处置设备,但会话仍处于打开状态。

要解决此问题,在断开设备连接时,您需要做更多的工作,如下所示:


如果您打开了服务(GattDeviceService),则需要调用service?.Dispose()
如果打开了特征(GattCharacteristic),则需要调用characteristic?.Service?.Dispose()


要检查会话状态,您可以致电service?.Session.SessionStatus
characteristic?.Service?.Session.SessionStatus

更新:
服务特征可能属于一种服务。因此,从特性级别进行处理时可能会遇到异常,因为您可能会重复执行以关闭已关闭的服务。
要解决此问题,您可以在服务级别上进行处置工作。以下基于BluetoothLE sample的代码段。您可以像这样编辑ClearBluetoothLEDeviceAsync():

        private async Task<bool> ClearBluetoothLEDeviceAsync()
{
...

foreach (var ser in ServiceCollection)
{
ser.service?.Dispose();
}

bluetoothLeDevice?.Dispose();
bluetoothLeDevice = null;
return true;
}

关于uwp - 蓝牙LE设备无法在Win 10 IoT UWP应用程序中断开连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47702584/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com