如何在Web浏览器导航时使进度条工作?

时间:2012-08-05 06:51:16

标签: c#

我正在使用C#上的进度条和Web浏览器控件,但我不知道在导航时创建一个平滑的进度条,你是否已经逐步创建它,我会很感激。

3 个答案:

答案 0 :(得分:10)

使用WebBrowser.ProgressChanged事件:

private void WebBrowser1_ProgressChanged(Object sender, 
                                         WebBrowserProgressChangedEventArgs e)
{
    progressBar.Maximum = (int) e.MaximumProgress;
    progressBar.Value = (int) e.CurrentProgress;
}

答案 1 :(得分:3)

进度条仅在您行动之前知道您要做多少时才有用。对于加载网页,这意味着要知道将要加载的每个资源的大小。这不可行。还有其他部分无法真正预测:

  1. DNS查询
  2. 打开与服务器的连接
  3. 从其他资源加载的资源,例如嵌入另一个CSS或CSS引用图像的JavaScript
  4. ...
  5. 所有主流浏览器早已放弃尝试显示进度来加载页面;现在他们只是显示加载活动。

    WebBrowser控件有一个ProgressChanged event,但我不知道它有多可靠。但这可能是你最好的尝试。但是,上述所有要点仍然适用。您和浏览器都不足以使进度条准确,因此它或者是一个粗略的近似值(在加载HTML后开始并仅表示加载的额外资源),或者当总资源的估计值错误时它会晃动甚至倒退

答案 2 :(得分:3)

private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
{
    progressBar1.Maximum = 100;
    progressBar1.Minimum = 0;
    if ((e.CurrentProgress > 0) && (e.CurrentProgress < 100))
    {
        progressBar1.Value = (int)e.CurrentProgress;
    }
}