/// <summary> /// Генерирует событие по изменению статуса порта /// </summary> /// <param name="status">Новое состояние CAN-порта</param> protected virtual 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_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; }