C#在不使线程休眠和冻结程序的情况下等待。

C#在不使线程休眠和冻结程序的情况下等待。,c#,.net,multithreading,visual-studio-2010,C#,.net,Multithreading,Visual Studio 2010,请建议一种方法或函数,使代码在继续之前等待几秒钟。我知道thread.sleep方法,但它冻结了整个程序 在继续下一部分之前,我想让程序暂停一段时间,以执行其程序。目前,程序执行其所有程序的速度太快,其他程序无法遵循 这是我的密码: { w1.Document.GetElementById("lst-ib").InnerText = "some text"; w1.Document.Forms[0].InvokeMember("submit");

请建议一种方法或函数,使代码在继续之前等待几秒钟。我知道thread.sleep方法,但它冻结了整个程序

在继续下一部分之前,我想让程序暂停一段时间,以执行其程序。目前,程序执行其所有程序的速度太快,其他程序无法遵循

这是我的密码:

     {
        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());

我将使用
BackgroundWorker
进行下载,在这个线程中,您将在下载之前使用
Sleep
功能


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

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


如果您多次导航,您只需要保持一些状态,就可以知道您在流程中的位置

您可以使用
async
编程模式,在这种情况下,您可以编写
wait Task.Delay(2000)并完成它。但是,最好是全面了解模式,而不仅仅是等待部分。不要执行
新建WebClient()。下载字符串(w1.Url.ToString())
-
WebClient
是一次性的,需要在使用后处理。如果你这样做,你可能会造成内存泄漏。目前程序执行所有程序的速度都太快,其他程序无法遵循。听起来像是设计的味道。你不应该仅仅为了让其他组件跟上而睡觉。也许描述一下你们想要实现的目标会帮助我们理解如何帮助你们。我会用另一种方式下载你们的东西。在下载过程中,您可以显示进度条或执行其他操作。您可以定义“等待”和“冻结”之间的区别吗?