2011-10-26 4 views
1

htmlボタンをクリックして別のページに移動する必要があります。クリック後、私はページの読み込みを待つ必要があり、古いページが読み込まれたときにだけ新しいページに移動します。ここでC#WebBrowserボタンクリックして別のページに移動

はコードで、そのボタンをクリックしてください:

element = webBrowser1.Document.GetElementById("LoginButton"); 
element.InvokeMember("click"); 

をウェブブラウザではIsBusyプロパティを持っているが、それはボタンのクリック後に動作します `tの:

element = webBrowser1.Document.GetElementById("LoginButton"); 
element.InvokeMember("click"); 
if(webBrowser1.IsBusy) 
{ 
    MessageBox.Show("Busy"); // Nothing happens, but page is not full loaded. 
} 

私がSystem.Threading.Thread.Sleep(1000)追加する場合ページの読み込みと次のページに行くことができますが、他のコンピュータのページ読み込み時間はもっと長くなる可能性があります。

前のページが読み込まれた後で別のページを読み込むにはどうすればよいですか?

P.S:私はロシア人です。悪い英語を申し訳ありません。

答えて

0

ウェブページにjavascriptブロックがある場合、Webブラウザコントロールを使用して問題を解決することはできません。 javascriptコードを使用してdocument.readyイベントが発生するのを待って、そのC#プログラムを知っておく必要があります。

以前は、ウェブページの状態を提供するjavascriptブロックを作成しました。それは次のようになります。

var isBusy = true; 
function getIsScriptBusy() { 
    return isBusy; 
} 
// when loading is complete: 
// isBusy = false; 
// document.ready event, for example 

、それがtrueを返すことを待ってC#コード:

void WaitForCallback(int timeout) { 
    Stopwatch w = new Stopwatch(); 
    w.Start(); 
    Wait(delegate() { 
     return (string)Document.InvokeScript("getIsScriptBusy") != "false" 
      && (w.ElapsedMilliseconds < timeout || Debugger.IsAttached); 
    }); 
    if(w.ElapsedMilliseconds >= timeout && !Debugger.IsAttached) 
     throw new Exception("Operation timed out."); 
} 
void Wait(WaitDelegate waitCondition) { 
    int bRet; 
    MSG msg = new MSG(); 
    while(waitCondition() && (bRet = GetMessage(ref msg, new HandleRef(null, IntPtr.Zero), 0, 0)) != 0) { 
     if(bRet == -1) { 
      // handle the error and possibly exit 
     } else { 
      TranslateMessage(ref msg); 
      DispatchMessage(ref msg); 
     } 
     Thread.Sleep(0); 
    } 
} 
0

WebBrowserコントロールによって公開されるイベントは多数あります。 NavigatedまたはDocumentCompletedをお試しください。

ニック

-1

これを使用して、 あなたは一度だけ

br1.DocumentCompleted += br1_DocumentCompleted; 
     Application.Run(); 
これを使用することができるかもしれません

コール

void br1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     var br1 = sender as WebBrowser; 
     if (br1.Url == e.Url) 
     { 
      Console.WriteLine("Natigated to {0}", e.Url); 
      Application.ExitThread(); // Stops the thread 
     } 
    } 

br1をあなたのウェブブラウザの名前に置き換えてください ほしいと思っています。

関連する問題