一旦我确定我已经检查了System.Devices.Aep.Bluetooth.Le.IsConnectable == true
我打电话
DiscoveredBluetoothLEDevice = await BluetoothLEDevice.FromIdAsync(DiscoveredDeviceInformation.Id);
这通常很好,我的应用程序可以订阅接收我所追求的GATT特征的更新。但同样经常调用FromIdAsync
失败
抛出异常:' System.ArgumentException'在System.Private.CoreLib.dll中 价值不在预期范围内。
传入的Id
是正确的,我已尝试使用设备的已知蓝牙地址await BluetoothLEDevice.FromBluetoothAddressAsync
,但我经常会遇到相同的例外情况。
这个神秘错误究竟是指什么潜在问题?
N.B。以下是Xavier Xie的评论
我有。要重新创建错误,我在您是否尝试过官方代码示例以确定是否仍然遇到此问题?
Scenario2_Client.ConnectButton_Click
的第119行放置一个断点,即中的第二行
bluetoothLeDevice = await BluetoothLEDevice.FromIdAsync(rootPage.SelectedBleDeviceId);
if (bluetoothLeDevice == null)
第一次运行示例时,一切都很好,但是如果我在达到断点时重新启动(第二次运行),我没有到达断点,因为我得到了前一行抛出的错误。
答案 0 :(得分:1)
您是否在任何地方正确关闭/处置BluetoothLEDevice?
我确定@Martin Zikmund的评论实际上是正确答案。
那就是你需要妥善处理BluetoothLEDevice对象。有时当你重新启动时GC已收集,有时它没有 - 因此是间歇性错误。
要修复使用使用块,如Martin建议的那样,或者在退出应用程序之前手动确保已经处理了BluetoothLEDevice并清除了对它的任何引用。 e.g
using (BluetoothLEDevice btd = BluetoothLEDevice.FromIdAsync(...))
{
// btd will be disposed when out of scope...
}
或
bluetoothLeDevice.Dispose();
bluetoothLeDevice = null;
// You can also force garbage collection
GC.Collect();
这个神秘错误究竟是指什么潜在问题?
错误很神秘,但我相信它是说id无效(超出范围),因为它已经在使用,这是对设备的引用,因此您无法再次连接。< / p>
另外,如果你没有正确处理它们,你会得到与串口等相同的东西。如果您使用相同的设备,设置等重新启动调试 - 可能GC已经清理并且可以正常工作 - 或者它可能因为端口正在使用而导致错误。
课程是始终正确关闭/处理流,端口,设备,文件等。使用实现IDisposable的对象执行此操作的最佳方法可能是通过&#34;使用&#34;声明语法,因为你不必记得做任何额外的事情。