C# Событие BLE DeviceConnectionChanged запускается несколько раз до выключения устройства. - PullRequest
0 голосов
/ 12 февраля 2020

Я подключился к устройству и успешно прочитал данные. Затем я отключаю устройство, DeviceConnectionChanged событие запускается с Disconnected состоянием соединения, затем включаю устройство, DeviceConnectionChanged событие запускается с Connected состоянием соединения, после этого l oop Connected затем Disconnected, .. . до отключения устройства.

Это функция подключения:

    public async Task<ConnectionResult> ConnectAsync(string deviceId, Guid serviceUUID)
    {
        _device = await BluetoothLEDevice.FromIdAsync(deviceId);
        if (_device == null)
        {
            return new Schema.ConnectionResult()
            {
                IsConnected = false,
                ErrorMessage = "Could not find specified device"
            };
        }

        if (!_device.DeviceInformation.Pairing.IsPaired)
        {
            _device = null;
            return new Schema.ConnectionResult()
            {
                IsConnected = false,
                ErrorMessage = "Device is not paired"
            };
        }

        _device.ConnectionStatusChanged -= DeviceConnectionStatusChanged;
        _device.ConnectionStatusChanged += DeviceConnectionStatusChanged; // <===== event here

        ... 
    }

    private void DeviceConnectionStatusChanged(BluetoothLEDevice sender, object args)
    {
        OnConnectionStatusChanged(new ConnectionStatusChangedEventArgs()
        {
            IsConnected = sender != null && (sender.ConnectionStatus == BluetoothConnectionStatus.Connected)
        }); // <==== always fire after reconnect
    }


    public event EventHandler<Events.ConnectionStatusChangedEventArgs> ConnectionStatusChanged;

    protected virtual void OnConnectionStatusChanged(Events.ConnectionStatusChangedEventArgs e)
    {
        ConnectionStatusChanged?.Invoke(this, e);
    }

Я хочу автоматически переподключиться и прочитать данные, когда устройство будет доступно. Как я могу это сделать?

...