c# - 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);
}
我想在设备可用时自动重新连接并读取数据。我怎样才能做到这一点?
解决方案
推荐阅读
- python - 如何获取用户输入选择的列表值和值的索引
- sql - 如何在一周内仅使用 10 个输入进行触发
- angular - angular4中ElementRef和TemplateRef的区别
- json - 如何在 dhtmlx 甘特图中添加许多属性?
- java - Mono.flatMap 在使用 MockWebServer 模拟响应时不起作用
- amazon-s3 - S3 生命周期 - 删除 x 个月前的文件
- web-scraping - 单击“_blank”后使用 Puppeteer 获取新页面的句柄?
- kotlin - 如何迭代字符列表并比较不同的元素
- asp.net - Json.NET 反序列化选择列表/多选列表
- mysql - IntelliJ 中列名旁边的图标是什么意思?