码迷,mamicode.com
首页 > Windows程序 > 详细

C#中执行动作超时检测

时间:2015-07-09 11:15:32      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

public delegate void DoHandler();
    public class TimeoutLimit
    {
        private readonly ManualResetEvent _mTimeoutObject;
        private bool _timeout;
        public DoHandler Do;

        public TimeoutLimit()
        {
            _mTimeoutObject = new ManualResetEvent(true);
        }
        public bool DoWithTimeout(TimeSpan timeSpan)
        {
            if (Do == null)
            {
                return false;
            }
            _mTimeoutObject.Reset();
            _timeout = true;
            Do.BeginInvoke(DoAsyncCallBack, null);
            if (!_mTimeoutObject.WaitOne(timeSpan, false))
            {
                _timeout = true;
            }
            return _timeout;
        }
        private void DoAsyncCallBack(IAsyncResult result)
        {
            try
            {
                Do.EndInvoke(result);
                _timeout = false;
            }
            catch (Exception ex)
            {
                _timeout = true;
            }
            finally
            {
                _mTimeoutObject.Set();
            }
        }
    }

使用示例

//TimeoutLimit timeout = new TimeoutLimit { Do = Your Func };
//bool bo = timeout.TimeoutLimit(new TimeSpan(0, 0, 0, 1));
//if (bo) {Your Code}

 

C#中执行动作超时检测

标签:

原文地址:http://www.cnblogs.com/johnvwan/p/4632433.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!