WriteClientCharacteristicConfigurationDescriptorAsync中的System.ObjectDisposedException

时间:2018-04-26 11:03:45

标签: uwp bluetooth-lowenergy

我正在尝试加速我编写的一些用于连接O6设备的UWP蓝牙代码。以下是一些典型的时序测量:

// 20ms
DiscoveredGattDeviceService = DiscoveredBluetoothLEDevice.GetGattService(gattServiceGuid);

// 4,284ms
result = await DiscoveredBluetoothLEDevice.GetGattServicesForUuidAsync(gattServiceGuid, BluetoothCacheMode.Uncached);

// 444ms
result = await DiscoveredBluetoothLEDevice.GetGattServicesForUuidAsync(gattServiceGuid, BluetoothCacheMode.Cached);

(N.B。最快的是过时的。)

从这些数字中可以看出,我应该选择最后一种方法,它比未缓存的呼叫快得多,并且没有标记为过时。但是,如果我选择两个更快的调用中的任何一个,我后来在我的代码中遇到了问题,我调用GattCharacteristic.WriteClientCharacteristicConfigurationDescriptorAsync会抛出异常

  

System.ObjectDisposedException

显然,我已经尝试将所有东西都视为静止,但这是我无法控制的。

我使用此代码获取GattCharacteristic

var accessStatus = await DiscoveredGattDeviceService.RequestAccessAsync();

然后

var result = await DiscoveredGattDeviceService.GetCharacteristicsAsync(BluetoothCacheMode.Uncached);

并且在对BluetoothCacheMode.Uncached

的调用中使用BluetoothCacheMode.CachedGetCharacteristicsAsync时,错误没有区别

我错过了什么?如何将GetGattServicesForUuidAsyncBluetoothCacheMode.Cached一起使用并最终处于我可以订阅GATT特征的状态?

1 个答案:

答案 0 :(得分:-1)

  

System.ObjectDisposedException

对已处置对象执行操作时引发的异常。 ObjectDisposedException

你在调用这个方法的地方

public IAsyncOperation<GattCommunicationStatus> WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue clientCharacteristicConfigurationDescriptorValue)

其中的论点  的 GattClientCharacteristicConfigurationDescriptorValue
 为此特性对象的ClientCharacteristicConfigurationDescriptor指定一个新值。因为它的枚举有三个现有字段。 GattClientCharacteristicConfigurationDescriptorValue fields.

当您传递BluetoothCacheMode枚举(指示某些蓝牙API方法是否应对系统中缓存的值进行操作或从蓝牙设备检索这些值)时,只有两个字段。 BluetoothCacheMode fields

请证明你的代码是正确的,并为返回管理异步操作的对象的方法调试appopriate参数值,该方法在完成后返回操作完成的状态。

您可以使用此方法

public IAsyncOperation<GattDeviceServicesResult> GetGattServicesForUuidAsync(Guid serviceUuid, BluetoothCacheMode cacheMode)

返回具有指定UUID的Bluetooth LowEnergy设备的GattDeviceServices。