private void LogUpdate(ASPacket pk) { UIUpdateDelegate updater = delegate { ICollectionView view = CollectionViewSource.GetDefaultView(logDatas); view.Refresh(); }; Dispatcher.BeginInvoke(DispatcherPriority.Normal, updater); }
/// <summary> /// 명령어 전송 루프 메소드 /// </summary> public void SendCommandLoop() { int delay = 1000; var sensorId = 1; var sensorNum = 9; // 포트가 연결되 있는동안 무한루프 // 1 loop당 설정된 딜레이 적용됨. while (comm != null && comm.isOpen()) { try { //루프가 실행 될때 마다 loopcount를 증가 시킴 UIUpdateDelegate updater = delegate { try { if (tbSensorID.Text.Length > 0 && tbSendCycle.Text.Length > 0) { sensorNum = int.Parse(tbSensorID.Text); delay = int.Parse(tbSendCycle.Text); } } catch (Exception e) { } }; Dispatcher.BeginInvoke(DispatcherPriority.Normal, updater); comm.readSensor(sensorId); Thread.Sleep(Math.Max(minimumreaddelay, delay)); if (comm.ResponseFlag) { // 응답이 있으면 설정된 딜레이 후 다음 센서를 읽어옴. sensorId++; if (sensorId > sensorNum) { sensorId = 1; } // Thread.Sleep(delay); } else { //50ms 이후 응답이 없으면 쉬었다가 재전송 // Thread.Sleep(200); } } catch (Exception e) { } } }
public void UpdateList() { UIUpdateDelegate UpdateHandler = new UIUpdateDelegate(UpdateUI); this.BeginInvoke(UpdateHandler); }
/// <summary> /// 데이터 수신 이벤트 처리 메소드 /// </summary> /// <param name="packet"></param> public void OnDataReceived(Object parsered, Object rawpkt, bool isCompleted) { UIUpdateDelegate updater = delegate { if (isCompleted == false) { //재전송 comm.ReSend(); return; } if (DOutComm != null && DOutComm.isOpen()) { DOutComm.send(rawpkt as String); } var rcvPkt = parsered as string[]; try { var id = rcvPkt[0]; var nId = int.Parse(id.Substring(1, 2)); ASPacket pkt = null; if (id.Contains("C")) { pkt = new ASPacket() { Id = nId, TimeStamp = System.DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss") }; logDatas.Insert(0, new ASPacket() { Id = nId, TimeStamp = System.DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss") }); } else { var x = double.Parse(rcvPkt[1]); var y = double.Parse(rcvPkt[2]); int wheellimitx_ = int.Parse(tbWheelAlarmX_.Text); int limitx_ = int.Parse(tbSeatAlarmX_.Text); int wheellimitx = int.Parse(tbWheelAlarmX.Text); int limitx = int.Parse(tbSeatAlarmX.Text); // int ylimit = int.Parse(tbSeatAlarmY.Text); if (nId == 1) { if (wheellimitx_ <= x && x <= wheellimitx) { long milliseconds = stopwatch.ElapsedMilliseconds; if (milliseconds >= nextTimeout) { isMusicOn = false; } if (isMusicOn == false) { Thread t = new Thread(new ThreadStart(Danger_Music)); isMusicOn = true; nextTimeout = milliseconds + musiclength; t.Start(); } Danger_Message(-1, 0); } else { MyMessage.IsOpen = false; } } else { if (limitx_ <= x && x <= limitx) { long milliseconds = stopwatch.ElapsedMilliseconds; if (milliseconds >= nextTimeout) { isMusicOn = false; } if (isMusicOn == false) { Thread t = new Thread(new ThreadStart(Danger_Music)); isMusicOn = true; nextTimeout = milliseconds + musiclength; t.Start(); } Danger_Message(nId, 1); } else { MyMessage2.IsOpen = false; } } pkt = new ASPacket() { TimeStamp = System.DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss"), Id = nId, X = x, Y = y, Status = "DATA" }; logDatas.Insert(0, new ASPacket() { TimeStamp = System.DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss"), Id = nId, X = x, Y = y, Status = "DATA" }); updateLabelContens(nId, x.ToString()); // 관람차 및 휠의 각도를 리스트에 저장해 놓고 if (nId > 0 && nId <= FERRIS + 1) { lastAngleList[nId - 1] = ferrisAngleList[nId - 1]; ferrisAngleList[nId - 1] = x; } // 휠의 각도가 들어올 때 전체 각도를 적용한다. if (nId == 1) { updateAngleAni(x); } } if (logDatas.Count >= limit) { logDatas.RemoveAt(limit - 1); } //ICollectionView view = CollectionViewSource.GetDefaultView(logDatas); //view.Refresh(); Thread update2 = new Thread(delegate() { LogUpdate(pkt); }); update2.Start(); } catch (Exception e) { } }; Dispatcher.BeginInvoke(DispatcherPriority.Normal, updater); }
public void UpdateList() { UIUpdateDelegate UpdateHandler = new UIUpdateDelegate(UpdateUI); this.BeginInvoke(UpdateHandler); }