当我将计时器设置为在1分钟后执行时,我在Windows服务中使用了System.Threading.Timer
。从12:00:00开始。
timer1[timer] =
new System.Threading.Timer(timerDelegate, obj, dueTime, interval);
以此间隔执行的计时器
12:00:00 12时零零分59秒 12:01:00 12时02分00秒 12时02分59秒
但我想在
执行12:00:00 12:01:00 12时02分00秒 12时03分00秒
为什么计时器在12:00:59开始?
我在代码
之后设置了执行的余数声明:
_interval[timer] = interval;
_startTime[timer] = DATeTime + dueTime;
用于计时器回调方法
long elapsedMs = Convert.ToInt64((dt - _startTime[timer]).TotalMilliseconds);
long intervalMs = Convert.ToInt64(_interval[timer].TotalMilliseconds);
long remainder = elapsedMs % intervalMs;
if (remainder != 0L)
{
timer1[timer].Change(
_interval[timer] - TimeSpan.FromMilliseconds(remainder),
_interval[timer]);
}
当在Windows XP中使用相同的应用程序时,它在Windows 7& Windows Server 2008它无法正常工作。
如何在Threading.Timer
中解决此问题?
答案 0 :(得分:1)
您可以尝试使用System.Timers.Timer - 它对我来说效果很好。为方便起见,我使用委托:
粘贴了一个静态计时器类public static class Timer
{
private static System.Timers.Timer _timer = new System.Timers.Timer();
public static void start(bool enabled, int interval)
{
_timer = new System.Timers.Timer();
_timer.Elapsed += new ElapsedEventHandler(_timerElapsed);
_timer.Enabled = enabled;
_timer.Interval = interval;
}
static void _timerElapsed(object sender, ElapsedEventArgs e)
{
OnTimedEvent(sender, e);
}
}