我怎么知道什么时候网站加载到WebBrowser?

时间:2015-02-23 03:39:17

标签: c# .net winforms webbrowser-control

首先我有这个按钮点击事件:

private void toolStripButton3_Click(object sender, EventArgs e)
{
    GetHtmls();
}

然后方法GetHtmls:

private void GetHtmls()
{
    for (int i = 1; i < 2; i++)
    {
        adrBarTextBox.Text = sourceUrl + i;
        getCurrentBrowser().Navigate(adrBarTextBox.Text);
        targetHtmls = (combinedHtmlsDir + "\\Html" + i + ".txt");
    }
}

现在循环是一个html但后来我将循环更改为i&lt; 45

getCurrentBrowser方法:

private WebBrowser getCurrentBrowser()
{
    return (WebBrowser)browserTabControl.SelectedTab.Controls[0];
}

然后在load form1事件中我有:

browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(Form1_DocumentCompleted);

完成的活动:

private void Form1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    WebBrowser currentBrowser = getCurrentBrowser();           
    StreamWriter writer = File.CreateText(targetHtmls);
    writer.Write(getCurrentBrowser().DocumentText);
    writer.Close();
}

我在这里做的是将html加载到Web浏览器并在html源内容的硬盘上创建一个文件。 但是我遇到了两个问题:

  1. 在已完成的事件中,它会一直调用已完成的事件并反复创建html文件,直到加载了该codument。我怎么能在完成的活动中做到这一点?我的意思是它会等待加载的dosument,然后写入文件并只创建一次文件?

  2. 当循环为i < 45而非2时,如何全部完成? 因此它将等待第一个html被加载然后在完成写入时写入文件使循环中的下一个html再次在已完成的事件中写入,依此类推,因此它不会相互移动。

  3. Web浏览器文档的已完成事件与其他已完成的事件不同,它每隔一秒左右一直调用已完成的事件,直到完成加载html为止。

1 个答案:

答案 0 :(得分:1)

我不确定WebBrowser在这种情况下的目的是什么。该控件用于人工交互,而不是加载X个站点。

我建议使用HttpWebRequest或更新的WebClient课程。在您显示的情况下,这更容易使用。

WebClient类可以像这样使用:

WebClient wc = new WebClient();
string html = wc.DownloadString("yourUrl");

这将等待请求完成并返回结果。不需要事件处理程序等。您可以使用async来提高性能。