我从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
消息框,但必须显示一次。
答案 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!");
}
}