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

我知道有三个 Timer类: System.Threading.TimerSystem.Timers.TimerSystem.Windows.Forms.Timer,但它们都没有 .Reset()函数,这个函数会将当前运行时间重置为0。

有没有具有这种功能的 BCL 类?有没有非黑客的方法?(我想也许改变它的时间限制可能会重置它)想想重新实现一个具有这种功能的 Timer类有多难,或者如何用 BCL 类可靠地实现它?

208127 次浏览

我一向如此。

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

... 那是黑客吗? :)

每个评论,在线程。定时器,这是 改变方法..。

DueTime 类型: System.Int32 延迟的时间 调用指定的回调方法 当定时器被构建时,在 毫秒,请指定 Timeout.Infinite,以防止 计时器从重新启动。指定零 (0)立即重新启动计时器。

除了 System.Threading.Timer 之外,所有计时器都具有相当于 Start ()和 Stop ()方法的功能。

因此,一种扩展方法,如..。

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

是一种方法。

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

  • 调用 Stop ()-Start ()用于定时器。定时器和窗体。定时器
  • 调用更改线程。定时器

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

int timerCtr = 0;
Timer mTimer;


private void ResetTimer() => timerCtr = 0;
private void mTimer_Tick()
{
timerCtr++;
// Perform task
}

因此,如果您打算每1秒重复一次,您可以将计时器间隔设置为100毫秒,并将计数器测试为10个周期。

如果计时器应该等待某些进程,而这些进程可能在不同的时间跨度结束,那么这种方法是合适的。

定时器(System.Windows.Forms.Timer)。

然后,停止。开始方法作为复位工作。

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

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

那么,

    const double TIMEOUT = 5000; // milliseconds


aTimer = new System.Timers.Timer(TIMEOUT);
aTimer.Start();     // timer start running


:
:


aTimer.Interval = TIMEOUT;  // restart the timer

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

更改(10000,0) ;//重置为10秒

我觉得挺好的。

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

if (!active)
myTimer = new Timer(new TimerCallback(TimerProc));


myTimer.Change(10000, 0);
active = true;


private void TimerProc(object state)
{
// The state object is the Timer object.
var t = (Timer)state;


t.Dispose();
Console.WriteLine("The timer callback executes.");
active = false;
    

// Action to do when timer is back to zero
}

我做这个

//Restart the timer
queueTimer.Enabled = true;

你可以做 timer.Interval = timer.Interval

我会做以下事情。 处理计时器并再次初始化它。 但这会清除你附加在这个计时器上的所有事件。

timer.Dispose();
timer = new System.Timers.Timer();