随机定时执行任务
间隔时间是一个随机数,可以设置间隔时间;
可以设置最大次数;
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();
分类:
助手类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现