Я пытаюсь ускорить некоторый код Bluetooth UWP, который я написал для подключения к устройству O6 . Вот некоторые типичные временные измерения:
// 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.Cached
в этом вызове GetCharacteristicsAsync
Чего мне не хватает? Как я могу использовать GetGattServicesForUuidAsync
с BluetoothCacheMode.Cached
и оказаться в состоянии, в котором я могу подписаться на характеристику GATT?