system.threading.timer无法工作

时间:2012-02-24 12:47:43

标签: c# .net multithreading

当我将计时器设置为在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中解决此问题?

1 个答案:

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