Files
RollMarking/JinYuan.Helper/TimerReset.cs
T

42 lines
1.3 KiB
C#
Raw Normal View History

2026-09-07 08:07:08 +08:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
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);
}
}
}