/// <summary> /// Adds the new or updated device to the displayed or unused list /// </summary> /// <param name="deviceInfo">The device to add</param> /// <returns>The task being used to add a device to a list</returns> private async Task AddDeviceToList(DeviceInformation deviceInfo) { // Make sure device name isn't blank or already present in the list. if (!string.IsNullOrEmpty(deviceInfo?.Name)) { var device = new ObservableBluetoothLEDevice(deviceInfo); var connectable = true; if (device.DeviceInfo.Properties.Keys.Contains("System.Devices.Aep.Bluetooth.Le.IsConnectable")) { connectable = (bool)device.DeviceInfo.Properties["System.Devices.Aep.Bluetooth.Le.IsConnectable"]; } if (connectable) { await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync( CoreDispatcherPriority.Normal, () => { if (_readerWriterLockSlim.TryEnterWriteLock(TimeSpan.FromSeconds(1))) { if (!BluetoothLeDevices.Contains(device)) { BluetoothLeDevices.Add(device); } _readerWriterLockSlim.ExitWriteLock(); } }); return; } } if (_readerWriterLockSlim.TryEnterWriteLock(TimeSpan.FromSeconds(1))) { _unusedDevices.Add(deviceInfo); _readerWriterLockSlim.ExitWriteLock(); } }
/// <summary> /// Adds the new or updated device to the displayed or unused list /// </summary> /// <param name="deviceInfo">The device to add</param> /// <returns>The task being used to add a device to a list</returns> private async Task AddDeviceToList(DeviceInformation deviceInfo) { // Make sure device name isn't blank or already present in the list. if (!string.IsNullOrEmpty(deviceInfo?.Name)) { var device = new ObservableBluetoothLEDevice(deviceInfo, DispatcherQueue); var connectable = (device.DeviceInfo.Properties.Keys.Contains("System.Devices.Aep.Bluetooth.Le.IsConnectable") && (bool)device.DeviceInfo.Properties["System.Devices.Aep.Bluetooth.Le.IsConnectable"]) || (device.DeviceInfo.Properties.Keys.Contains("System.Devices.Aep.IsConnected") && (bool)device.DeviceInfo.Properties["System.Devices.Aep.IsConnected"]); if (connectable) { await DispatcherQueue.ExecuteOnUIThreadAsync( () => { if (_readerWriterLockSlim.TryEnterWriteLock(TimeSpan.FromSeconds(1))) { if (!BluetoothLeDevices.Contains(device)) { BluetoothLeDevices.Add(device); } _readerWriterLockSlim.ExitWriteLock(); } }, DispatcherQueuePriority.Normal); return; } } if (_readerWriterLockSlim.TryEnterWriteLock(TimeSpan.FromSeconds(1))) { _unusedDevices.Add(deviceInfo); _readerWriterLockSlim.ExitWriteLock(); } }