如何在Web浏览器导航时使进度条工作?
我正在使用C#上的进度条和Web浏览器控件,但是我不知道在导航时创建一个平滑的进度条,你是否已经逐步创建它,我会很感激。
使用WebBrowser.ProgressChanged
事件:
private void WebBrowser1_ProgressChanged(Object sender, WebBrowserProgressChangedEventArgs e) { progressBar.Maximum = (int) e.MaximumProgress; progressBar.Value = (int) e.CurrentProgress; }
进度条仅在您在操作之前知道您将要执行多少操作时才有用。 对于加载网页,这将意味着知道将要加载的每个资源的大小。 那不太可行。 还有其他部分无法真正预测:
- DNS查找
- 打开与服务器的连接
- 从其他资源加载的资源,例如嵌入另一个CSS或CSS引用图像的JavaScript
- …
所有主流浏览器早已放弃尝试显示加载页面的进度 ; 现在他们只是显示加载活动。
WebBrowser控件有一个ProgressChanged
事件,但我不知道它有多可靠。 但这可能是你最好的尝试。 但是,上述所有要点仍然适用。 您和浏览器都没有足够的知识来使进度条准确,因此它或者是粗略的近似值(在加载HTML之后开始并仅表示加载的额外资源),或者当总资源的估计值错误时它会晃动甚至倒退。
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; } }