private void RefreshCSerialPorts_Click(object sender, RoutedEventArgs e) { var refreshedPorts = OutputSerialDeviceHandler.GetPorts(); SerialPorts.Clear(); foreach (var port in refreshedPorts) { SerialPorts.Add(port); } }
public async Task RefreshSerialPortsAsync() { var activePorts = SerialPorts.Where(p => p.IsActive).Select(p => p.PortID).ToList(); SerialPorts.Clear(); #if NETFX_CORE var serialPortSelector = Windows.Devices.SerialCommunication.SerialDevice.GetDeviceSelector(); var devices = await DeviceInformation.FindAllAsync(serialPortSelector); foreach (var item in devices) { bool isActive = activePorts.Contains(item.Id); SerialPorts.Add(new SerialPortInfo(item.Id, item.Name, isActive)); if (isActive) { activePorts.Remove(item.Id); } } #else //.NET foreach (var item in System.IO.Ports.SerialPort.GetPortNames()) { bool isActive = activePorts.Contains(item); SerialPorts.Add(new SerialPortInfo(item, item, isActive)); if (isActive) { activePorts.Remove(item.Id); } } #endif #if DEBUG // SerialPorts.Add(new SerialPortInfo("//COM-TEST/1", "Test Port 1")); // SerialPorts.Add(new SerialPortInfo("//COM-TEST/2", "Test Port 2")); // SerialPorts.Add(new SerialPortInfo("//COM-TEST/3", "Test Port 3")); // SerialPorts.Add(new SerialPortInfo("//COM-TEST/4", "Test Port 4")); #endif // Remove controllers on ports that were active but lost foreach (var item in activePorts) { Watcher.Instance.RemoveController(item); } }
public async Task RefreshPorts() { var token = _cancellationSource.Token; IsRefreshBusy = true; await Task.Delay(750, token).ConfigureAwait(true); var lastSelectedDeviceId = SelectedSerialPortDeviceId; SerialPorts.Clear(); try { var scope = new ManagementScope("\\\\.\\ROOT\\cimv2"); var observer = new ManagementOperationObserver(); using var searcher = new ManagementObjectSearcher(scope, new SelectQuery("Win32_PnPEntity")); observer.ObjectReady += (_, e) => { var portInfo = SerialPortInfo.FromManagementObject(e.NewObject as ManagementObject); if (portInfo == null) { return; } SerialPorts.Add(portInfo); }; var taskCompletion = new TaskCompletionSource(); observer.Completed += (_, _) => taskCompletion.TrySetResult(); searcher.Get(observer); using (token.Register(() => taskCompletion.TrySetCanceled())) await taskCompletion.Task.WaitAsync(token).ConfigureAwait(true); } catch { } SelectSerialPortByDeviceId(lastSelectedDeviceId); await Task.Delay(250, token).ConfigureAwait(true); IsRefreshBusy = false; }