Таймер никогда не останавливается

1

Я вызываю функцию Stop() из функции Tick callback, но она не останавливается и эта функция работает снова и снова. Почему и как это исправить?

Эта функция вызывается только один раз:

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 Коды сообщений", пока он должен быть показан один раз.

  • 0
    Как долго вы оставляли окно сообщения перед его закрытием?
  • 0
    Попробуйте поставить timer1.Stop(); перед окном сообщения.
Теги:
timer
winforms

2 ответа

6
Лучший ответ

Вам нужно отменить свои заявления:

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

Так оно и есть; он будет продолжать тикать, пока вы не закроете коробку (так как блоки сообщений MessageBox.Show), что может быть много тиков.

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!");
     }
 }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню