zoukankan      html  css  js  c++  java
  • 随机定时执行任务

    间隔时间是一个随机数,可以设置间隔时间;

    可以设置最大次数;

    public class RandomTimerEngine
        {
            private System.Threading.Timer _timmer = null;
            private Action<object> _callBack = null;
            private int _minSecond = 0;
            private int _maxSecond = 0;
            private int _maxCount = 0;
            private int _curIndex = 0;
            private bool _isStop = false;
    
            public RandomTimerEngine(Action<object> callBack) : this(callBack, 0, 10)
            {
            }
            public RandomTimerEngine(Action<object> callBack, int minSecond, int maxSecond):this(callBack, minSecond, maxSecond, 0)
            {
            }
            public RandomTimerEngine(Action<object> callBack, int minSecond, int maxSecond, int maxCount)
            {
                _callBack = callBack;
                _minSecond = minSecond;
                _maxSecond = maxSecond;
                _maxCount = maxCount;
                _timmer = new System.Threading.Timer(this.TimerCallBack, null, Timeout.Infinite, Timeout.Infinite);
            }
            public void Start()
            {
                int randomSecond = this.GetRandomSeconds(_maxSecond);
                _timmer.Change(randomSecond * 1000, Timeout.Infinite);
            }
            public void Stop()
            {
                _isStop = true;
            }
    
            private void TimerCallBack(object state)
            {
                if (!_isStop)
                {
                    if (_maxCount == 0 || (_maxCount > 0 && _curIndex++ < _maxCount))
                    {
                        _callBack(state);
                        int randomSecond = this.GetRandomSeconds(_maxSecond);
                        _timmer.Change(randomSecond * 1000, Timeout.Infinite);
                    }                
                }
            }
    
            private int GetRandomSeconds(int maxSeconds = 5)
            {
                return new Random().Next(1, maxSeconds);
            }
    
    
        }

    使用:

    每隔1-5秒执行一次

    RandomTimerEngine engine = new RandomTimerEngine((state) => { MessageBox.Show("hello"); }, 0, 5);
    engine.Start();

    每隔1-5秒执行一次,最多执行10次

    RandomTimerEngine engine = new RandomTimerEngine((state) => { MessageBox.Show("hello"); }, 0, 5,10);
    engine.Start();
  • 相关阅读:
    Linux上将文件夹复制到指令目录
    将PC版网页转为手机端自适应网页
    WCF初探-18:WCF数据协定之KnownType
    WCF初探-17:WCF数据协定之等效性
    WCF初探-16:WCF数据协定之基础知识
    WCF初探-15:WCF操作协定
    2018数学二21题解法分析
    柯西不等式:简单常考形式
    等价、合同、相似、正交变换;二次型,正定,惯性指数
    高数狄利克雷收敛条件(傅里叶)
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12539560.html
Copyright © 2011-2022 走看看