public void ClosePort() { if (!_port.IsOpen) { return; } _stopwatch.Stop(); _port.Close(); PortStatusChanged?.Invoke(false); }
public void OpenPort() { if (_port.IsOpen) { return; } _port.Open(); _startTime = DateTime.Now; _stopwatch = Stopwatch.StartNew(); PortStatusChanged?.Invoke(true); }
private void OnTimedEvent(object sender, ElapsedEventArgs e) { if ((_online || !IsOnline()) && (!_online || IsOnline())) { return; } _online = IsOnline(); PortStatusChanged?.Invoke(this, new SerialPortStatusChangedEventHandlerArgs { Online = _online }); }
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); } }
public void OpenPort() { if (_port.IsOpen) { return; } _port.Open(); _cancelRead = new CancellationTokenSource(); _bgWorker = new BackgroundWorker { WorkerSupportsCancellation = true }; _bgWorker.DoWork += async(sender, e) => { while (!_bgWorker.CancellationPending) { await DetectPacket(); } e.Cancel = true; }; _startTime = DateTime.Now; _stopwatch = Stopwatch.StartNew(); _bgWorker.RunWorkerAsync(); PortStatusChanged?.Invoke(true); }
public async Task ClosePort() { if (!_port.IsOpen) { return; } _bgWorker.CancelAsync(); if (!_cancelRead.IsCancellationRequested) { _cancelRead.Cancel(); } var timeout = READ_TIMEOUT; while (_bgWorker.IsBusy && timeout > 0) { await Task.Delay(100); timeout -= 100; } _stopwatch.Stop(); _port.Close(); Busy = false; PortStatusChanged?.Invoke(false); }