定时器永不停止

时间:2014-11-07 21:04:46

标签: c# winforms timer

我从Stop()回调事件函数调用Tick但它没有停止并且该函数反复运行。为什么以及如何解决这个问题?

此功能仅调用一次:

System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer();
void foo() {
    timer1.Interval = 1000;
    timer1.Tick += new EventHandler(timerTick);
    timer1.Start();
}

和回调函数:

 void timerTick(object o, EventArgs ea)
 {
     if (browser.ReadyState == WebBrowserReadyState.Complete)
     {
         MessageBox.Show("stop it!");
         timer1.Stop();
     }
 }

这将显示无限的stop it消息框,但必须显示一次。

2 个答案:

答案 0 :(得分:6)

你需要撤销你的陈述:

if (browser.ReadyState == WebBrowserReadyState.Complete)
{
   timer1.Stop();
   MessageBox.Show("stop it!");
}

目前的情况;它会一直打勾,直到你关闭一个方框(因为MessageBox.Show块),这可能是一个很多的刻度。

答案 1 :(得分:1)

另一种方法是使用System.Timers.Timer代替。您可以告诉该计时器运行一次,而不是重新启动,直到您告诉它。

System.Timers.Timer timer1 = new System.Timers.Timer();
void foo() {    
    timer1.Interval = 1000;
    timer1.Elapsed += new ElapsedEventHandler(timerTick);

    //This assumes that the class `foo` is in is a System.Forms class. Makes the callback happen on the UI thread.
    timer1.SynchronizingObject = this;

    //Tells it to not restart when it finishes.
    timer1.AutoReset = false;

    timer1.Start();
}

 void timerTick(object o, ElapsedEventArgs ea)
 {
     if (browser.ReadyState == WebBrowserReadyState.Complete)
     {
         MessageBox.Show("stop it!");
     }
 }