如何重置C#中的计时器?
有三个我知道的Timer
类, System.Threading.Timer
, System.Timers.Timer
和System.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;