2012-03-16 7 views
0

.NET WebBrowserコントロールを使用しようとしていて、一般的な問題に遭遇しました。ページが実際に完全に読み込まれたときをどのように伝えますか?私はここを見て、私はGoogleで見て、私は多くの例と質問を見つけたので、私はそれらを試してみました。そして私がナビゲートしようとした最初の場所はhttp://www.microsoft.comでした。それはあまりうまくいかなかった。なぜ.NET WebBrowser DocumentCompletedはmicrosoft.comのために何度も起動しますか?

私のコードは以下の通りです。私は2つの異なるアプローチを試しました - 1つは、URL比較を使用し、1つはフレームを数えました。私は期待どおりに動作しませんでした...私は何らかの形で何度か完了したことを意味するテキスト値で "Form1 - 完了 - 完了 - 完了"を得ました。

複雑なWebページで使用する方が、より信頼性の高い方法がありますか?ここで

は私のコードです:

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 
関連する問題