2015-01-14 164 views
0

我想顯示一個MessageBox正確該網頁完全加載到我的Winforms WebControl中。如何在執行下一行之前等待一秒

我用這個代碼延遲:

System.Threading.Thread.Sleep(4000); 
Task.Delay(2000); 

這些都不是工作。問題是我得到了一個無限循環。

有人可以給我一個解決方案或任何更好的替代品(如果有的話)?

這裏是我的代碼

private void btnGo_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string WebPage = txtURL.Text.Trim(); 
     Webcntrl.Navigate(WebPage); // Webcntrl is Name of webcontrol in my Windows Applications 

     while (Webcntrl.ReadyState.ToString() != "Complete") 
     { 
      //System.Threading.Thread.Sleep(4000); 
      //Task.Delay(2000); 
     } 
     MessageBox.Show("hI ! website loaded Sucessfully"); 
    } 
    catch (Exception ex) 
    { 

    } 
} 

按艾哈邁德·伊利亞斯建議我修改後的代碼按以下

private void btnGo_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       string WebPage = txtURL.Text.Trim(); 
       Webcntrl.Navigate(WebPage); // Webcntrl is Name of webcontrol in my Windows Applications 

       Webcntrl.DocumentCompleted +=new WebBrowserDocumentCompletedEventHandler(SiteLoaded); 


      } 
      catch (Exception ex) 
      { 

      } 


     } 

     private void SiteLoaded(object sender, WebBrowserDocumentCompletedEventArgs e) 
     { 
      MessageBox.Show("hI ! website loaded Sucessfully");   

     } 

但現在,消息彈出多次。

+1

「但兩者都不起作用「並不能很好地描述你的問題。究竟出了什麼問題? –

+3

您應該使用Web瀏覽器控件的documentcomplete事件。 http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documentcompleted(v=vs.110).aspx –

+0

此外,'Task.Delay(2000)'實際上不會導致你的代碼等待,除非你把它稱爲'等待Task.Delay(2000)'或'Task.Delay(2000).Wait()' –

回答

1

,你應該使用Web瀏覽器控件的DocumentComplete事件:

http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.documentcompleted(v=vs.110).aspx

此通知您,當頁面已完成加載。你正在做的是進入一個while循環,並阻止瀏覽器控件正在執行的線程,因此即使當你放入一個線程休眠時,也不會有任何「工作」(不管怎樣,不建議這樣做)

+0

我修改了我的問題,請檢查..我使用方法你建議我,它的工作很好,但在一些URL消息彈出窗口多次意味着它多次在SiteLoaded功能 –

+0

首先,您需要在導航之前先訂閱事件 - 其更好的做法,否則您可能遲到收到通知。其次,它可能是一些網站正在導航或在他們的網站上有多個導航,在這種情況下,事件將會多次提升 - 對此無能爲力。你還檢查了eventhandler參數包含的內容,看看它是否適合你? (「e」參數) –

相關問題