我使用.NET的webbrowser控件来打开成堆的url,并在DocumentCompleted事件中调用循环。
现在我想控制超时。所以我使用了一个计时器,当超时时它将使用stop()函数停止webbrowser。
问题是:似乎stop函数触发DocumentCompleted事件有时。如果定时器在停止webbrowser后调用下一个循环,则会发生错误。如果它没有调用下一个循环,有时循环将在中间停止。
这样的程序(不相关的代码被删除):
private string[] urls;//urls are stored here
private int index = 0;//next url index
private void loopFunc()
{
timer.Enabled = true;
wb.navigate(urls[index]);
index++;
return;
}
private void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
loopFunc();
}
private void timer1_Tick(object sender, EventArgs e)
{
wb.stop();
//loopFunc() or not?
}
我不确定它是否会触发事件,而且我没有通过谷歌找到任何内容。
答案 0 :(得分:2)
如果我清楚地了解你的情况,这可以解决你的问题:
Timer On ---> loopFunc() --> goto url --> oncomplete -> start timer again -->
|
|---> Stop timer so it doesn't call loopFunc again
所以在loopFunc
之后停止计时器,下载完成后,再次调用loopFunc
:
private void loopFunc()
{
timer.Enabled = true;
wb.navigate(urls[index]);
index++;
timer.stop(); //<<<<<
return;
}
你的勾号应该是:
private void timer1_Tick(object sender, EventArgs e)
{
loopFunc();
}
然后在完成文档时再次启动计时器:
private void wb_DocumentCompleted(object sender,
WebBrowserDocumentCompletedEventArgs e)
{
wb.Stop();
timer.Start();
}