zoukankan      html  css  js  c++  java
  • 委托实例(异步)

    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
  • 相关阅读:
    如何提高技术素养
    spoolsv.exe 无法启动
    太阳高度角和方位角的计算
    树莓派 3 alsa 声卡驱动
    PHP 7 Xdebug 深深的坑
    java 线性规划 和lingo 比较
    Python Microsoft Visual C++ Compiler Package for Python 2.7
    Node debug
    angular 调试 js (分 karms protractor / test e2e unit )
    hbase scan 的例子
  • 原文地址:https://www.cnblogs.com/yanranziruo/p/10429991.html
Copyright © 2011-2022 走看看