using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace JinYuan.Helper { /// /// 定时器重置时间间隔,定时器执行未超间隔则设置剩余时间后再次触发,超时则立即触发 /// public class TimerReset : IDisposable { private Timer timer; private DateTime nextTime; /// /// 使用using语句,在定时器TimerCallback中使用 /// using语句块内为时间到时的执行代码,dispose计算使用的时间,来重设下次触发时间 /// /// 定时器 /// 时间间隔 public TimerReset(Timer tim, int ep) { timer = tim; nextTime = DateTime.Now.AddMilliseconds(ep);//设置下次执行时间 } public void Dispose() { //执行完后,重新设置定时器下次执行时间. TimeSpan timeout = nextTime.Subtract(DateTime.Now); if (timeout < TimeSpan.Zero) { timeout = TimeSpan.Zero; } timer.Change(timeout, Timeout.InfiniteTimeSpan); } } }