Bluetooth LE System.ObjectDisposedException Объект был закрыт

Я пытаюсь подписаться на функцию уведомления моей доски Adafruit, чтобы получить некоторые данные. Устройство успешно подключается к моему приложению С#. Однако, когда я пытаюсь выполнить эту операцию:

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); 
}

person valegians    schedule 06.03.2018    source источник


Ответы (3)


Я получаю аналогичные проблемы в своем коде UWP, подключающемся к устройству O6. решение @GrooverFromHolland мне не помогло. То, что действительно работало, было ранее в соединительном коде. Вместо чего-то вроде этого

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);
person dumbledad    schedule 25.04.2018

В некоторых версиях Windows у меня была такая же проблема, не знаю, какая это была версия. Решение состояло в том, чтобы сделать все объекты BLE полем в моем приложении, чтобы на них не влиял сборщик мусора. кажется, что вещи были утилизированы без причины.

person GrooverFromHolland    schedule 13.04.2018

У меня было такое же исключение, но на питоне при использовании BLE. Решение состояло в том, чтобы просто забыть устройство в моих настройках Bluetooth и снова запустить программу. Надеюсь сэкономить вам часы, которые потребовались, прежде чем я попробовал это!

person Classic    schedule 13.04.2021