我有一个Win Forms应用程序,其中包含一个Web浏览器控件。由于导航的异步特性,我需要能够在Web浏览器操作之间添加延迟。
Document_Complete事件是无用的,因为它没有考虑到页面可能包含多个AJAX请求。该事件经常会触发多次。
更新:
当页面加载时,将进行AJAX请求。因此,页面加载后通过HTTP请求获取某些DIV中的内容。因此,Document_Complete事件在文档首次加载时被触发,然后在每个(AJAX)HTTP请求返回时被触发。不好。
更新2:
我的应用程序尝试从Webbrowser.Document对象中读取HtmlElements。因为代码执行速度比HTTP请求返回快...所以文档对象不包含所有html元素。
我需要的是一种延迟主线程方法调用的方式。我已经尝试使用计时器:
Document_Complete事件是无用的,因为它没有考虑到页面可能包含多个AJAX请求。该事件经常会触发多次。
更新:
当页面加载时,将进行AJAX请求。因此,页面加载后通过HTTP请求获取某些DIV中的内容。因此,Document_Complete事件在文档首次加载时被触发,然后在每个(AJAX)HTTP请求返回时被触发。不好。
更新2:
我的应用程序尝试从Webbrowser.Document对象中读取HtmlElements。因为代码执行速度比HTTP请求返回快...所以文档对象不包含所有html元素。
我需要的是一种延迟主线程方法调用的方式。我已经尝试使用计时器:
private void startTimer()
{
timer.Interval = 2000;
timer.Start();
while (!BrowserIsReady)
{
//Wait for timer
}
}
这会锁定线程,导致计时事件无法触发。该循环永远不会结束。
我希望运行一系列像这样的方法:
Navagate("http://someurl.com");
//delay
ClickALink();
//delay
Navagate("Http://somewhere.com");
//delay
我能用计时器和BackgroundWorker解决这个问题吗?有人能提供一个可能的解决方案吗?
DocumentCompleted
事件呢?这似乎比阻塞主线程更可取。 - Nathan Ernst