.NET webbrowser.stop()函数是否触发了DocumentCompleted事件?

时间:2012-03-19 09:01:05

标签: c# browser webbrowser-control

我使用.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?
}

我不确定它是否会触发事件,而且我没有通过谷歌找到任何内容。

1 个答案:

答案 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();
}