蓝牙LE System.ObjectDisposedException对象已关闭

时间:2018-03-06 17:15:52

标签: c# uwp bluetooth-lowenergy adafruit

我正在尝试订阅Adafruit董事会的Notify功能以获取一些数据。设备成功连接到我的c#应用程序。但是,当我尝试执行此操作时:

await characteristic.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify); 

我得到一个System.ObjectDisposedException该对象已被关闭。我不知道为什么会这样......

董事会一直在写我的应用程序,这会是一个问题吗?我是否只能在电路板开始写入之前编写客户端特征描述符?或者是由其他东西引起的错误?

董事会与Adafruit手机应用程序完美配合。

var tmp = await characteristic.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.Notify);                            
if (tmp == GattCommunicationStatus.Success) 
{ 
    Console.WriteLine("Subscribed"); 
    characteristic.ValueChanged += characteristicValueChanged; 
    break; 
}                            
else 
{ 
    Console.WriteLine(device.ConnectionStatus + " : " + tmp); 
}

3 个答案:

答案 0 :(得分:1)

我在连接到O6设备的UWP代码中遇到了类似的问题。 @ GrooverFromHolland的solution对我不起作用。在连接代码中之前的工作是什么。而不是像这样的东西

var result = await DiscoveredBluetoothLEDevice.GetGattServicesAsync();

或者

var result = await DiscoveredBluetoothLEDevice.GetGattServicesForUuidAsync(gattServiceGuid);

试试这个

var result = await DiscoveredBluetoothLEDevice.GetGattServicesAsync(BluetoothCacheMode.Uncached);

或者

var result = await DiscoveredBluetoothLEDevice.GetGattServicesForUuidAsync(gattServiceGuid, BluetoothCacheMode.Uncached);

答案 1 :(得分:0)

在某些Windows版本上我遇到了同样的问题,不知道它是哪个版本。 解决方案是让所有BLE对象成为我的应用程序中的一个字段,这样它们就不会受到垃圾收集器的影响。事情似乎是没有理由的。

答案 2 :(得分:0)

我有同样的例外,但在使用 BLE 时在 python 中。解决方案只是在我的蓝牙设置中“忘记设备”,然后再次运行程序。 希望能为您节省我尝试之前花费的时间!