public static void UpdateControllerStatus(string Device_ID, string Status) { try { Form form = Application.OpenForms["FormMain"]; DataGridView Conn_gv; if (form == null) { return; } Conn_gv = form.Controls.Find("Conn_gv", true).FirstOrDefault() as DataGridView; if (Conn_gv == null) { return; } if (Conn_gv.InvokeRequired) { UpdateController ph = new UpdateController(UpdateControllerStatus); Conn_gv.BeginInvoke(ph, Device_ID, Status); } else { if (Conn_gv.DataSource == null) { //Conn_gv.DataSource = new List<ConnectState>(); Conn_gv.DataSource = new BindingList <ConnectState>(); } //List<ConnectState> connList = (List<ConnectState>)Conn_gv.DataSource; BindingList <ConnectState> connList = (BindingList <ConnectState>)Conn_gv.DataSource; var find = from Ctrl in connList where Ctrl.Device_ID.Equals(Device_ID) select Ctrl; if (find.Count() == 0) { ConnectState con = new ConnectState(); con.Device_ID = Device_ID; con.Connection_Status = Status; connList.Add(con); } else { find.First().Connection_Status = Status; } //connList.Sort((x, y) => { return x.Device_ID.CompareTo(y.Device_ID); }); connList = new BindingList <ConnectState>(connList.OrderBy(x => x.Device_ID).ToList());// fix System.IndexOutOfRangeException Conn_gv.DataSource = null; Conn_gv.DataSource = connList; //Conn_gv.Refresh(); // Conn_gv.ClearSelection(); } } catch { logger.Error("UpdateControllerStatus: Update fail."); } }
private void LoadConnCfg() { ConfigReader <ControllerInfo> ControllerCfg = new ConfigReader <ControllerInfo>(); foreach (ControllerInfo each in ControllerCfg.ReadFile("config/controllers.json")) { if (!ControllerStatus.ContainsKey(each.ControllerName)) { each.Status = "Disconnected"; ControllerStatus.Add(each.ControllerName, each); if (!DeviceNo_cb.Items.Contains(each.DeviceNo)) { DeviceNo_cb.Items.Add(each.DeviceNo); } Controller_cb.Items.Add(each.ControllerName); } if (!ControllerList.ContainsKey(each.ControllerName)) { switch (each.ControllerType) { case "SanwaAligner": ControllerList.Add(each.ControllerName, new AlignerController(each.IPAdress, each.Port, each.CommandTimeout, each.ControllerName, this)); break; case "SanwaRobot": ControllerList.Add(each.ControllerName, new RobotController(each.IPAdress, each.Port, each.CommandTimeout, each.ControllerName, this)); break; case "KawasakiRobot": break; } } } Conn_gv.AutoGenerateColumns = true; Conn_gv.DataSource = ControllerStatus.Values.ToList(); Conn_gv.ClearSelection(); ConfigReader <Alarm> AlarmCfg = new ConfigReader <Alarm>(); foreach (Alarm each in AlarmCfg.ReadFile("config/Alarm/RobotErrorCode.json")) { if (!AlarmList.ContainsKey(each.Error_Code)) { AlarmList.Add(each.Error_Code, each); } } foreach (string each in Directory.GetDirectories("config/Command/")) { ControllerType_cb.Items.Add(each.Substring(each.LastIndexOf("/") + 1)); } }
public static void UpdateControllerStatus(string Device_ID, string State) { try { Form form = Application.OpenForms["Form1"]; DataGridView Conn_gv; if (form == null) { return; } Conn_gv = form.Controls.Find("Conn_gv", true).FirstOrDefault() as DataGridView; if (Conn_gv == null) { return; } if (Conn_gv.InvokeRequired) { UpdateController ph = new UpdateController(UpdateControllerStatus); Conn_gv.BeginInvoke(ph, Device_ID, State); } else { foreach (ConnectState each in ConnList) { if (each.Device_Id.Equals(Device_ID)) { each.State = State; } } Conn_gv.DataSource = null; Conn_gv.DataSource = ConnList; //Conn_gv.Refresh(); Conn_gv.ClearSelection(); } } catch { logger.Error("UpdateControllerStatus: Update fail."); } }
private void UpdateControllerStatus(string Device_ID, string Status) { if (Conn_gv.InvokeRequired) { //當InvokeRequired為true時,表示在不同的執行緒上,所以進行委派的動作!! UpdateController ph = new UpdateController(UpdateControllerStatus); Conn_gv.Invoke(ph, Device_ID, Status); } else { ControllerInfo target; if (ControllerStatus.TryGetValue(Device_ID, out target)) { target.Status = Status; Conn_gv.DataSource = ControllerStatus.Values.ToList(); //Conn_gv.Refresh(); Conn_gv.ClearSelection(); } } }