Я пишу приложение WPF, связывающееся с датчиком пальца по BLE. Обычно это работает просто отлично: я могу сканировать датчики, выбирать один, подключать, отключать и т. Д. Однако осталась одна проблема. Когда датчик выходит за пределы диапазона, приложение перестает получать уведомления об изменении значения, которые обычно приходят каждые 10 миллисекунд. Если я попытаюсь отключить его вручную через несколько секунд с помощью этого кода:
var result = await SelectedCharacteristic.WriteClientCharacteristicConfigurationDescriptorAsync(GattClientCharacteristicConfigurationDescriptorValue.None);
if (result == GattCommunicationStatus.Success)
{
RemoveValueChangedHandler();
res = true;
NotifyUser("Successfully disconnected from the selected BerryMed sensor.", NotifyType.StatusMessage);
}
else
{
NotifyUser("Error un-registering for value changed notifications.", NotifyType.ErrorMessage);
}
результат возвращает false. Опять же, это происходит только тогда, когда приложение перестает получать уведомления из-за выхода за пределы допустимого диапазона, и мой ответ задерживается на несколько секунд.
Так есть ли способ программно обнаружить потерю соединения (когда перестают поступать уведомления), а затем вызвать этот метод, чтобы отключиться вовремя?
Я пытался использовать специальный 500-миллисекундный таймер, чтобы отслеживать уведомления об изменении значения и определять, когда они перестают поступать. Требуется 1 секунда, чтобы обнаружить это и вызвать разъединение. Но проблема в том, что отключение работает только один раз. Если я снова подключусь без выхода из приложения и снова выйду из зоны действия, то это отключение не будет работать снова. Если я перезапускаю приложение, оно повторяется - успех при отключении после первого выхода из диапазона и сбой при последующем.