Files
2025-07-31 11:18:43 +08:00

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