Я вызываю функцию 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
Коды сообщений", пока он должен быть показан один раз.
Вам нужно отменить свои заявления:
if (browser.ReadyState == WebBrowserReadyState.Complete)
{
timer1.Stop();
MessageBox.Show("stop it!");
}
Так оно и есть; он будет продолжать тикать, пока вы не закроете коробку (так как блоки сообщений MessageBox.Show
), что может быть много тиков.
Другой способ сделать это - использовать 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!");
}
}
timer1.Stop();
перед окном сообщения.