2012-08-05 25 views
2

我正在與C#上的進度條和網頁瀏覽器控件一起工作,但我不知道如何在瀏覽時創建一個流暢的進度條,你是否一步一步地創建它,我將不勝感激。如何使瀏覽器導航時進度條可以正常工作?

+0

你的意思是進度條或一個通用的動畫?也許是一個沙漏光標,而它正在加載? – 2012-08-05 06:57:00

+0

不,我的意思是一個進度條,所以我知道加載網頁的進度。 – 2012-08-05 07:00:04

回答

3

一個進度條只有在你知道之前這個動作你要做多少時纔有用。對於加載網頁來說,這意味着要知道每個將要加載的資源的大小。這不是真的可行。也有不能真正預測的其他部分:

  1. DNS查找
  2. 打開到服務器的連接
  3. 資源從其他資源,如裝一個JavaScript嵌入另一個CSS或CSS參考圖像
  4. ...

所有主流瀏覽器早已放棄了試圖表明進步加載一個頁面;現在他們只是顯示加載活動。

WebBrowser控件有ProgressChanged event但我不知道它有多可靠。但這可能是你最好的嘗試。儘管如此,上面提到的所有問題仍然適用。您和瀏覽器都不知道如何使進度條準確無誤,因此它可能是一個粗略的近似值(從加載HTML開始並代表已加載的附加資源開始),或者當總資源估計錯誤時它會混亂或甚至倒退。

+0

是的也許,但你知道如何在Web瀏覽器上實現進度改變的事件嗎? – 2012-08-05 06:58:16

+1

這不完全正確。我的瀏覽器顯示一個進度條。我相信它在收到標題後會出現;可能是如果存在「Content-Length」。 – mpen 2012-08-05 07:02:08

+0

其實我已經實現了後臺工作人員控制來監視瀏覽器的進度,但它仍然無法獲得整個過程。例如,我點擊了網絡上的鏈接,然後進度條不會產生任何影響,因爲我無法在進度更改事件上實施它。 – 2012-08-05 16:02:39

10

使用WebBrowser.ProgressChanged事件:

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

此代碼不處理webbrowser返回超出範圍值的情況 – 2015-06-11 14:14:32

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; 
    } 
}