首页 > 解决方案 > C# BLE DeviceConnectionChanged 事件多次触发,直到关闭设备

问题描述

我连接到设备并成功读取数据。然后我关闭设备,DeviceConnectionChanged事件触发Disconnected连接状态,然后打开设备,DeviceConnectionChanged事件触发Connected连接状态,然后循环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);
    }

我想在设备可用时自动重新连接并读取数据。我怎样才能做到这一点?

标签: c#winformsbluetoothbluetooth-lowenergy

解决方案


推荐阅读