C#在不使线程休眠和冻结程序的情况下等待。
请建议一种方法或函数,使代码在继续之前等待几秒钟。我知道thread.sleep方法,但它冻结了整个程序 在继续下一部分之前,我想让程序暂停一段时间,以执行其程序。目前,程序执行其所有程序的速度太快,其他程序无法遵循 这是我的密码: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");
{
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
是一次性的,需要在使用后处理。如果你这样做,你可能会造成内存泄漏。目前程序执行所有程序的速度都太快,其他程序无法遵循。听起来像是设计的味道。你不应该仅仅为了让其他组件跟上而睡觉。也许描述一下你们想要实现的目标会帮助我们理解如何帮助你们。我会用另一种方式下载你们的东西。在下载过程中,您可以显示进度条或执行其他操作。您可以定义“等待”和“冻结”之间的区别吗?