private CComPort() { AutoConnect = false; UseSLIP = false; _rxBuf = new List<byte>(); RxData = new Queue<Pack>(); Status = EPortStatus.Closed; _statusUpdaterTimer = new Timer(StatusTimerHandler, null,Timeout.Infinite, 2000); var rxThread = new Thread(RxThreadHandler){IsBackground = true, Priority = ThreadPriority.Normal}; rxThread.Start(_rxManualResetEvent); }
/// <summary> /// Метод разрыва соединения и остановки потока вычитки /// </summary> public bool Disconnect() { if (_port.IsOpen) { _port.Close(); Status = EPortStatus.Closed; } _rxManualResetEvent.Reset(); RxData.Clear(); _rxBuf.Clear(); return(true); }
private CComPort() { AutoConnect = false; UseSLIP = false; _rxBuf = new List <byte>(); RxData = new Queue <Pack>(); Status = EPortStatus.Closed; _statusUpdaterTimer = new Timer(StatusTimerHandler, null, Timeout.Infinite, 2000); var rxThread = new Thread(RxThreadHandler) { IsBackground = true, Priority = ThreadPriority.Normal }; rxThread.Start(_rxManualResetEvent); }
private void StatusTimerHandler(object state) { if (!_port.IsOpen) //Если порт оказался закрытым { Status = EPortStatus.Closed; //Меняем статус if (AutoConnect) //и надо его открывать автоматически { string s; Connect(out s); //пробуем открыть } } if (PortStatusChanged != null) //Если на событие статуса кто-то подписался, то вызываем обработчик, передав ему туда текущий статус { PortStatusChanged.BeginInvoke(this, new PortStatusChangedEventArgs { Status = Status }, null, null); } }
/// <summary> /// Метод открытия порта RS-232. /// </summary> /// <returns>true - если порт успешно открыт; false - если порт открыть не удалось, тогда msg содержит описание ошибки</returns> public bool Connect(out string msg) { try { if (!_port.IsOpen) { _port.Open(); Status = EPortStatus.Open; _rxManualResetEvent.Set(); } msg = "OK"; return(true); } catch (Exception e) { Status = EPortStatus.Closed; msg = e.Message; return(false); } }
private void StatusTimerHandler(object state) { if (!_port.IsOpen) //Если порт оказался закрытым { Status = EPortStatus.Closed; //Меняем статус if(AutoConnect) //и надо его открывать автоматически { string s; Connect(out s); //пробуем открыть } } if (PortStatusChanged != null) //Если на событие статуса кто-то подписался, то вызываем обработчик, передав ему туда текущий статус PortStatusChanged.BeginInvoke(this, new PortStatusChangedEventArgs { Status = Status }, null, null); }
/// <summary> /// Метод разрыва соединения и остановки потока вычитки /// </summary> public bool Disconnect() { if (_port.IsOpen) { _port.Close(); Status = EPortStatus.Closed; } _rxManualResetEvent.Reset(); RxData.Clear(); _rxBuf.Clear(); return true; }
/// <summary> /// Метод открытия порта RS-232. /// </summary> /// <returns>true - если порт успешно открыт; false - если порт открыть не удалось, тогда msg содержит описание ошибки</returns> public bool Connect(out string msg) { try { if (!_port.IsOpen) { _port.Open(); Status = EPortStatus.Open; _rxManualResetEvent.Set(); } msg = "OK"; return true; } catch (Exception e) { Status = EPortStatus.Closed; msg = e.Message; return false; } }