1.定义委托 /// <summary> /// 设备状态发生改变委托定义 /// </summary> /// <param name="sender"></param> /// <param name="pArg">设备状态事件改变参数</param> public delegate void DeviceStateChangedEventHandler(object sender, DeviceStateEventArgs pArg); 2.定义事件 /// <summary> /// 设备状态改变事件 /// </summary> public IntegrateDelegateAndEventLib.DeviceStateChangedEventHandler OnDeviceStateChangedEventHandler; 3.注册事件 m_gc.OnDeviceStateChangedEventHandler += CommunicateModuleDataInteraceLogic_OnDeviceStateChangedEventHandler; 4.定义事件执行方法 #region【方法:设备状态改变事件响应方法】 private void CommunicateModuleDataInteraceLogic_OnDeviceStateChangedEventHandler(object sender, IntegrateDelegateAndEventLib.DeviceStateEventArgs pArg) { this.InvokeMethod(() => { switch ((ChannelStateEnum)pArg.ChannelStateEnum) { case ChannelStateEnum.Natural: tsslStatus.Text = "连接状态:已连接"; break; case ChannelStateEnum.Fault: tsslStatus.Text = "连接状态:未连接"; break; default: tsslStatus.Text = "设备状态:未连接"; break; } }); } #endregion 5.调用执行 if (OnChannelStateChangedEvent != null) IntegrateDelegateAndEventLib.IntegrateEventDefine.DeviceStateChangedEvent(DateTime.Now, m_DeviceModel.ChannelState, DateTime.Now, OnDeviceStateChangedEventHandler); 6.提交异步执行方法 #region 【方法:提交设备状态改变事件】 /// <summary> /// 提交设备状态改变事件 /// </summary> /// <param name="pDeviceID">设备编号</param> /// <param name="pDeviceStateEnum">设备状态</param> /// <param name="pDeviceStateTime">状态时间</param> /// <param name="pChannelStateEnum">通道状态</param> /// <param name="pChannelStateTime">通道时间</param> /// <param name="pHandler">事件</param> public static void DeviceStateChangedEvent(DateTime pDeviceStateTime, int pChannelStateEnum, DateTime pChannelStateTime, DeviceStateChangedEventHandler pHandler) { if (pHandler != null) { try { DeviceStateEventArgs arg = new DeviceStateEventArgs( pDeviceStateTime, pChannelStateEnum, pChannelStateTime); foreach (DeviceStateChangedEventHandler handler in pHandler.GetInvocationList()) { handler.BeginInvoke(null, arg, new AsyncCallback(DeviceStateChangedEndAsync), null); } } catch (Exception ee) { //LogLib.Log.WriteError(ee); } } } #endregion #region 【方法:提交设备状态改变异步方法】 /// <summary> /// 提交设备状态改变异步方法 /// </summary> /// <param name="ar"></param> private static void DeviceStateChangedEndAsync(IAsyncResult ar) { DeviceStateChangedEventHandler d = null; try { AsyncResult asres = (AsyncResult)ar; d = ((DeviceStateChangedEventHandler)asres.AsyncDelegate); d.EndInvoke(ar); } catch (Exception ex) { //LogLib.Log.WriteError(ex); } } #endregion