/// <summary> /// Генерирует событие по изменению статуса порта /// </summary> /// <param name="status">Новое состояние CAN-порта</param> private void OnPortChangesStatus(CanPortStatus status) { EventArgsPortChangesStatus args = new EventArgsPortChangesStatus(status); EventHandlerPortChangesStatus handler = this.PortChangedStatus; if (handler != null) { foreach (EventHandlerPortChangesStatus SingleCast in handler.GetInvocationList()) { ISynchronizeInvoke syncInvoke = SingleCast.Target as ISynchronizeInvoke; if ((syncInvoke != null) && (syncInvoke.InvokeRequired)) { syncInvoke.Invoke(SingleCast, new Object[] { this, args }); } else { SingleCast(this, args); } } } return; }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// <summary> /// Обработчик события изменения статуса CAN-порта /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void EventHandler_CanPort_PortChangedStatus(object sender, EventArgsPortChangesStatus args) { String msg; this._PropertyGridPortSettings.Refresh(); switch (args.Status) { case CanPortStatus.IsActive: { this._MenuPortOpen.Enabled = false; break; } case CanPortStatus.IsClosed: { this._MenuPortOpen.Enabled = true; break; } case CanPortStatus.IsPassive: { this._MenuPortOpen.Enabled = false; break; } case CanPortStatus.IsPassiveAfterReset: { this._MenuPortOpen.Enabled = false; break; } case CanPortStatus.Unknown: { this._MenuPortOpen.Enabled = false; this._MenuPortClose.Enabled = false; msg = "Can-порт изменил состояние на Unknown"; throw new Exception(msg); //break; } default: { msg = String.Format( "Can-порт передал новое состояние {0}, которое не поддерживается в данном ПО", args.Status.ToString()); throw new NotImplementedException(msg); } } return; }
/// <summary> /// Обработчик события изменения состояния CAN-порта /// </summary> /// <param name="sender"></param> /// <param name="args"></param> private void EventHandler_CanPort_PortChangesStatus(object sender, EventArgsPortChangesStatus args) { String traceMessage; switch (args.Status) { case CanPortStatus.IsActive: { traceMessage = String.Format( "{0}: Сеть {1}: CAN-порт изменил свое состояние на {2}", DateTime.Now.ToString(new System.Globalization.CultureInfo("ru-Ru")), this.Description, CanPortStatus.IsClosed); Trace.TraceInformation(traceMessage); // СAN-порт в активном состоянии можно работать //this.Start(); break; } case CanPortStatus.IsClosed: { traceMessage = String.Format( "{0}: Сеть {1}: CAN-порт изменил свое состояние на {2}", DateTime.Now.ToString(new System.Globalization.CultureInfo("ru-Ru")), this.Description, CanPortStatus.IsClosed); Trace.TraceInformation(traceMessage); // CAN-порт закрыт, останавливаем службы this.Stop(); break; } case CanPortStatus.IsPassive: { traceMessage = String.Format( "{0}: Сеть {1}: CAN-порт изменил свое состояние на {2}", DateTime.Now.ToString(new System.Globalization.CultureInfo("ru-Ru")), this.Description, CanPortStatus.IsClosed); Trace.TraceInformation(traceMessage); // CAN-порт закрыт, останавливаем службы this.Stop(); break; } case CanPortStatus.IsPassiveAfterReset: { traceMessage = String.Format( "{0}: Сеть {1}: CAN-порт изменил свое состояние на {2}", DateTime.Now.ToString(new System.Globalization.CultureInfo("ru-Ru")), this.Description, CanPortStatus.IsClosed); Trace.TraceInformation(traceMessage); // CAN-порт закрыт, останавливаем службы this.Stop(); break; } case CanPortStatus.Unknown: { traceMessage = String.Format( "{0}: Сеть {1}: CAN-порт изменил свое состояние на {2}", DateTime.Now.ToString(new System.Globalization.CultureInfo("ru-Ru")), this.Description, CanPortStatus.IsClosed); Trace.TraceInformation(traceMessage); // CAN-порт закрыт, останавливаем службы this.Stop(); break; } default: { traceMessage = String.Format( "{0}: Сеть {1}: CAN-порт изменил свое состояние на {2}", DateTime.Now.ToString(new System.Globalization.CultureInfo("ru-Ru")), this.Description, CanPortStatus.IsClosed); Trace.TraceError(traceMessage); // CAN-порт закрыт, останавливаем службы this.Stop(); throw new InvalidOperationException(traceMessage); } } return; }