2015-07-11 87 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。

如果你多次導航,你只需要保持一些狀態,知道你在哪裏。