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