在代码执行之间创建暂停?

时间:2015-03-07 05:51:04

标签: c#

webBrowser1.Document.GetElementById("UserName").InnerText = user;
webBrowser1.Document.GetElementById("Password").InnerText = pass;
webBrowser1.Document.GetElementById("btnLogin").InvokeMember("Click");
Thread.Sleep(2000);
webBrowser1.Document.GetElementById("games").InvokeMember("Click");

这里的代码根本不起作用。基本上我需要的是在webbrowser点击登录按钮的时间和它到达游戏标签的时间之间的“等待期”。这是因为它命中登录按钮并尝试在页面加载之前点击游戏选项卡,从而触发空错误。

Proper way to add delay in my code execution

我看过很多像这样的线程,他们都建议使用不起作用的Thread.Sleep()。当我尝试使用计时器时,代码继续正常运行而不是等待。我希望在等待页面加载的两段代码之间创建暂停,然后单击游戏选项卡。

1 个答案:

答案 0 :(得分:1)

您可以使用WebBrowser.DocumentCompleted事件。 Documentation

  

在WebBrowser控件完成加载文档时发生。

编码示例:

webBrowser1.DocumentCompleted+= new WebBrowserDocumentCompletedEventHandler(ActivateGameButon); // < = Bind the event to occur when Document id fully loaded 

// You can define what to occur inside the event
void ActivateGameButon(object sender, WebBrowserDocumentCompletedEventArgs e)
{
  // This happens after document is fully loaded

   HtmlElement gameElement;

   // To be on safe side, we check for element existence too
   if((gameElement=webBrowser1.Document.GetElementById("games"))!=null){
       gameElement.InvokeMember("Click");
   }

}