2015-07-11 75 views
0

请提出一种方法或函数,让代码等待几秒钟后再继续。我知道thread.sleep方法,但它冻结了整个程序。C#等待线程不休眠并冻结程序。

我想暂停一段时间,让程序在下一部分恢复之前完成其程序。目前,该计划执行的所有程序过于快速,无法遵循其他程序。

这里是我的代码:

 { 
     w1.Document.GetElementById("lst-ib").InnerText = "some text"; 
     w1.Document.Forms[0].InvokeMember("submit"); 

     //Some code here that would create a 1 second pause before downloading html. 
     //Thread.sleep(2000) is not suitable. 

     string html = new WebClient().DownloadString(w1.Url.ToString()); 
+0

您可以使用'async'编程模式,在这种情况下,您可以编写'await Task.Delay(2000);'并完成它。然而,最好的是如果你学会了所有的模式,而不仅仅是等待的部分。 – AgentFire

+0

不要做'新的WebClient()。DownloadString(w1.Url.ToString())'''WebClient'是一次性的,需要在使用后处置。如果你像这样链接,你可以创建一个内存泄漏。 – Enigmativity

+2

*此时程序执行的所有程序过于快速,无法执行其他程序。*这听起来像是一种设计气味。你不应该睡觉只是为了让其他组件赶上。也许描述你想要达到的目标将帮助我们理解如何为你提供帮助。 –

回答

0

我猜W1是一个WebBrowser控件。不要提交表单和休眠,而要使用控件公开的事件来知道文档已准备就绪。

您可以使用DocumentCompleted事件来了解WebBrowser已完成加载,然后可以访问DOM以获取新URL。

如果你多次导航,你只需要保持一些状态,知道你在哪里。