2012-03-16 50 views
0

我正在嘗試使用.NET WebBrowser控件並遇到了一個常見問題 - 如何知道頁面何時完全加載?我看了看,看到Google,發現了很多例子和問題,所以我試了一下。我試圖導航的第一個地方是http://www.microsoft.com。它沒有那麼好。爲什麼.NET WebBrowser DocumentCompleted爲microsoft.com激發過多次?

我的代碼如下。我嘗試了兩種不同的方法 - 一種是使用Url比較,另一種是計算幀數。既沒有按照我的預期工作......我在Text值中得到了「Form1 - Done - Done - Done - Done」,這意味着該頁以某種方式完成了多次。

是否有更好,更可靠的方法來使用複雜的網頁?

這裏是我的代碼:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace WebBrowserCompleted 
{ 
    public partial class Form1 : Form 
    { 
     Uri navTarget = new Uri(@"http://www.microsoft.com"); 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      //webBrowser1.Navigate(navTarget); 
      startNavigate(@"http://www.microsoft.com"); 
     } 

     private int mFrameCount; 

     private void startNavigate(string url) 
     { 
      mFrameCount = 0; 
      webBrowser1.Navigate(url); 
     } 

     private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      mFrameCount += 1; 
      bool done = true; 
      if (webBrowser1.Document != null) 
      { 
       HtmlWindow win = webBrowser1.Document.Window; 
       if (win.Frames.Count > mFrameCount && win.Frames.Count > 0) 
        done = false; 
      } 
      if (done) 
      { 
       Console.WriteLine("Now it is really done"); 
       this.Text = this.Text + " - Done"; 
      } 
     } 
    } 
} 

回答

0

我有一個類似的問題...我在DocumentCompleted事件的開始拋出此代碼,以減少解僱。

它大大減少了這個問題,但它仍然不一定是完美的100%的網站。

代碼:

If Me.wbDebugMain.ReadyState <> WebBrowserReadyState.Complete Then 
    Exit Sub 
End If 
相關問題