2015-01-14 104 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”参数) –

相关问题