• 委托实例(异步)


    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
  • 相关阅读:
    基于ngx_lua模块的waf开发实践
    ffmpeg 和 x264的参数对照
    Javascript 面向对象编程(一):封装
    使用node.js + socket.io + redis实现基本的聊天室场景
    的NodeJS异步数据库函数需要同步的答案 +
    vlan设置
    windows2003服务器双线双IP双网卡设置方法
    Centos 添加SWAP(交换分区)
    centos6 编译安装gcc4.8.2
    libtool: Version mismatch error. 解决方法
  • 原文地址:https://www.cnblogs.com/yanranziruo/p/10429991.html
Copyright © 2020-2023  润新知