38 lines
1.2 KiB
C#
38 lines
1.2 KiB
C#
using System;
|
|||
|
|
using System.Threading;
|
||
|
|
|
||
|
|
namespace JinYuan.Helper
|
||
|
|
{
|
||
|
|
/// <summary>
|
||
|
|
/// 定时器重置时间间隔,定时器执行未超间隔则设置剩余时间后再次触发,超时则立即触发
|
||
|
|
/// </summary>
|
||
|
|
public class TimerReset : IDisposable
|
||
|
|
{
|
||
|
|
private Timer timer;
|
||
|
|
private DateTime nextTime;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 使用using语句,在定时器TimerCallback中使用
|
||
|
|
/// using语句块内为时间到时的执行代码,dispose计算使用的时间,来重设下次触发时间
|
||
|
|
/// </summary>
|
||
|
|
/// <param name="tim">定时器</param>
|
||
|
|
/// <param name="ep">时间间隔</param>
|
||
|
|
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);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|