我的算法会自动填充特定网站中的元数据(使用webBrowser)。在填充元数据之后,算法按下按钮发送(在网站中),它必须等待几秒钟才能在继续之前分析元数据(这不是算法的一部分,而是网页)。问题是我无法知道元数据分析完成的时间。我尝试下一个代码,用于在继续进程之前等待完全加载的网页:
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowser1_DocumentCompleted);
但是没用的因为元数据分析与网页加载无关。
所以,因为元数据分析需要大约20-40秒,我认为等待大约60秒并继续是一个很好的解决方案。我试试:
System.Threading.Thread.Sleep(60000);
以编程方式按下“发送”按钮,但是对于任何原因,在按下按钮之前等待60秒。
答案 0 :(得分:0)
我不认为我完全理解为什么你想要做你在这里要求的事情,所以我试图回答这个问题我在这里有什么信息。
如果您在事件处理程序中调用Thread.Sleep
(例如,Button的点击事件的事件处理程序),Thread.Sleep
将有效暂停该程序,因为您&# 39;仍然在UI线程上。我猜这不是你之后的事情吗?
如果您希望UI线程继续(您可能正在完成大部分工作),那么您需要使Button的点击处理程序异步,并使用{{1相反。您可以在此处查看正在使用的模式:Should I avoid 'async void' event handlers?
此外,您可以找到一种方法,使用此处详述的技术回调您的应用程序:http://www.codeproject.com/Articles/35373/VB-NET-C-and-JavaScript-communication
使用这种方法,我确信你可以完全摆脱等待。
答案 1 :(得分:0)
我知道在这种情况下使用异步操作是一个非常好的选择。但我会建议另一种方式。
我想这是一个Windows窗体应用,因此您可以使用System.Windows.Forms.Timer
来执行此操作。按下发送按钮后,将计时器间隔设置为60000并添加事件处理程序。
首先添加一个名为t
的字段,以便所有实例方法都可以访问它。
Timer t = new Timer();
然后,
//code to press the send button here
t.Interval = 60000;
t.Tick += DoStuff;
t.Start();
事件处理程序是这样的:
private void DoStuff (object sender, EventArgs e) {
t.Stop();
//Do whatever you want here
}
如果您不使用Windows窗体,则应使用System.Timers.Timer
(类似于Windows窗体)或System.Threading.Timer
(这更难使用)。你可以在这里阅读文档:
System.Timers.Timer
:https://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx
System.Threading.Timer
:https://msdn.microsoft.com/en-us/library/system.threading.timer(v=vs.110).aspx