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);
}
}
}