如何重置C#中的计时器?

有三个我知道的Timer类, System.Threading.TimerSystem.Timers.TimerSystem.Windows.Forms.Timer ,但是没有一个.Reset()函数会重置当前stream逝的时间为0。

有没有BCL类有这个function? 有没有这样做的黑客方式? (我想也许改变它的时间限制可能会重置它)思考重新实现具有此function的Timer类,或如何与BCL类之一可靠地执行它是多么困难?

我经常做 …

 myTimer.Stop(); myTimer.Start(); 

…是一个黑客? 🙂

按照Threading.Timer的说法,它是Change方法

dueTimetypes: System.Int32调用构造Timer时指定的callback方法(以毫秒为单位)之前延迟的时间量。 指定Timeout.Infinite以防止计时器重新启动。 指定零(0)立即重新启动计时器。

除了System.Threading.Timer,所有的定时器都有相当于Start()和Stop()的方法。

所以扩展方法如…

 public static void Reset(this Timer timer) { timer.Stop(); timer.Start(); } 

…是一个方法去解决它。

对于System.Timers.Timer ,根据MSDN文档, http : //msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx :

如果在定时器启动后设置了间隔,则计数将被重置。 例如,如果将间隔设置为5秒,然后将Enabled属性设置为true,则在设置Enabled时开始计数。 如果在计数为3秒时将间隔重置为10秒,则“启用”设置为true后13秒内第一次引发Elapsed事件。

所以,

  const double TIMEOUT = 5000; // milliseconds aTimer = new System.Timers.Timer(TIMEOUT); aTimer.Start(); // timer start running : : aTimer.Interval = TIMEOUT; // restart the timer 

你可以写一个名为Reset()的扩展方法,

  • 对Timers.Timer和Forms.Timer调用Start() – Stop()
  • 调用Threading.Timer的更改

我刚给计时器分配了一个新值:

 mytimer.Change(10000, 0); // reset to 10 seconds 

这对我来说可以。

在代码的顶部定义定时器: System.Threading.Timer myTimer;

 if (!active) { myTimer= new System.Threading.Timer(new TimerCallback(TimerProc)); } myTimer.Change(10000, 0); active = true; private void TimerProc(object state) { // The state object is the Timer object. System.Threading.Timer t = (System.Threading.Timer)state; t.Dispose(); Console.WriteLine("The timer callback executes."); active = false; //action to do when timer is back to zero } 

对于一个定时器(System.Windows.Forms.Timer)。

.Stop,然后.Start方法作为重置。

重置windows.timer的其他方法是使用计数器,如下所示:

 int tmrCtr = 0; Timer mTimer; private void ResetTimer() { tmrCtr = 0; } private void mTimer_Tick() { tmrCtr++; //perform task } 

所以如果你打算每隔1秒重复一次,你可以设置100ms的定时器间隔,并testing计数器10个周期。

如果定时器应该等待一些进程可能在不同的时间间隔结束,那么这是合适的。

你可以做timer.Interval = timer.Interval

我这样做

 //Restart the timer queueTimer.Enabled = true;