zoukankan      html  css  js  c++  java
  • C#超时处理(转载)

     /// <summary>
        /// 超时处理
        ///
        ///
        /// </summary>
        public class TimeoutChecker
        {
            long _timeout;              //超时时间
            System.Action<Delegate> _proc;               //会超时的代码
            System.Action<Delegate> _procHandle;         //处理超时
            System.Action<Delegate> _timeoutHandle;      //超时后处理事件
            System.Threading.ManualResetEvent _event = new System.Threading.ManualResetEvent(false);

            public TimeoutChecker(System.Action<Delegate> proc, System.Action<Delegate> timeoutHandle)
            {            
                this._proc = proc;
                this._timeoutHandle = timeoutHandle;
                this._procHandle = delegate
                {
                    //计算代码执行的时间
                    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
                    sw.Start();
                    if (this._proc != null)
                        this._proc(null);
                    sw.Stop();
                    //如果执行时间小于超时时间则通知用户线程
                    if (sw.ElapsedMilliseconds < this._timeout && this._event != null)
                    {
                        this._event.Set();
                    }
                };            
            }
            public bool Wait(long timeout)
            {
                this._timeout = timeout;
                //异步执行
                this._procHandle.BeginInvoke(null, null,null);
                //如果在规定时间内没等到通知则为 false
                bool flag = this._event.WaitOne((int)timeout, false);
                if (!flag)
                {
                    //触发超时时间
                    if (this._timeoutHandle != null)
                        this._timeoutHandle(null);
                }
                this.Dispose();           

                return flag;
            }        
            private void Dispose()
            {       
                if(this._event != null)
                    this._event.Close();
                this._event = null;
                this._proc = null;
                this._procHandle = null;
                this._timeoutHandle = null;              
            }        
        }

    调用超时处理方法:

     /// <summary>
            /// 检查摄像头是否可用
            /// </summary>
            /// <param name="device">所选设备</param>
            /// <param name="image">摄像头输出,用于判断</param>
            /// <returns>image不为空摄像头可用,否则不可用</returns>
            public bool isCameraWork(Camera device, NImage image)
            {
                try
                {
                    device.StartCapturing();
                    TimeoutChecker timeout = new TimeoutChecker(
                        delegate
                        {
                            try
                            {
                                image = device.GetCurrentFrame();
                            }
                            catch
                            {
                                image = null;
                                nlView.Image = null;
                            }
                        },
                        delegate
                        {
                            Console.WriteLine(device.ToString() + "获取设备超时");
                        });
                    if (timeout.Wait(1000))
                        Console.WriteLine(device.ToString() + " 设备获取成功");
                }
                catch (Exception e)
                {
                    image = null;
                    Console.WriteLine(device.ToString() + e.Message);
                }
                device.StopCapturing();
                if (image != null)
                    return true;
                else
                    return false;
            }

  • 相关阅读:
    Mysql创建nextval函数
    宝塔配置tomcat的配置
    小程序获取授权信息
    pycharm 2017新建文件添加编码方式等
    Linux下利用expect,不用交互模式,直接登陆远程主机
    linux文件权限解析(摘)
    linux环境下根据文件的某一列进行去重
    oracle查询用户权限及角色(摘)
    插入排序-python实现
    css清除浮动方法
  • 原文地址:https://www.cnblogs.com/zhoulove/p/4121039.html
Copyright © 2011-2022 走看看