void checkTimer_Tick(object sender, EventArgs e) { var portNames = SerialPort.GetPortNames(); //Eliminamos los nodos que ya no están conectados fisicamente for (int i = nodes.Count - 1; i >= 0; i--) { if (!portNames.Contains(nodes[i].PortName)) { nodes[i].ConnectionStateChanged -= newNode_ConnectionStateChanged; nodes.RemoveAt(i); } } //Añadimos los nuevos nodos foreach (string portName in portNames.Where(p => !nodes.Exists(n => n.PortName == p))) { var newNode = new NodeConnection(portName); newNode.Identify(); newNode.ConnectionStateChanged += newNode_ConnectionStateChanged; nodes.Add(newNode); } }
void newNode_ConnectionStateChanged(object sender, NodeConnection.ConnectionStates newState) { if (NodeCollectionChanged != null) EventHelper.RaiseEventOnUIThread(NodeCollectionChanged, new object[] { this, null }); }