Web浏览器没有触发DocumentCompleted事件
本文关键字:DocumentCompleted 事件 浏览器 Web | 更新日期: 2023-09-27 18:03:30
我试图实现简单的网页屏幕捕获程序。当我在UI线程上使用我的代码时,一切似乎都没有问题,但是当我从非UI线程调用方法时,我无法再获得WebBrowserDocumentCompleted事件。我还试了这个:
System.Windows.Forms.WebBrowser wb = new System.Windows.Forms.WebBrowser();
wb.DocumentCompleted += WebBrowserDocumentCompleted;
wb.Visible = true;
wb.ScrollBarsEnabled = false;
wb.ScriptErrorsSuppressed = true;
wb.Navigate(url);
while (wb.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
{
Application.Current.Dispatcher.Invoke(DispatcherPriority.Background,
new Action(delegate { }));
}
程序只是在while循环中无限期挂起。什么好主意吗?
像这样:
public void Start()
{
System.Windows.Forms.WebBrowser wb = new System.Windows.Forms.WebBrowser();
wb.DocumentCompleted += WebBrowserDocumentCompleted;
wb.Visible = true;
wb.ScrollBarsEnabled = false;
wb.ScriptErrorsSuppressed = true;
wb.Navigate(url);
}
private void WebBrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if( (sender as WebBrowser).ReadyState == System.Windows.Forms.WebBrowserReadyState.Complete)
{
// Do what ever you want to do here when page is completely loaded.
}
}
解决方案令人难以置信。经过几个小时的寻找和尝试,我找到了答案。
在webBrowser1
的属性中,我设置了AllowNavigation = false
。
如果设置为false
,则仅注册DocumentCompleted
事件一次,但当设置为AllowNavigation = true
(默认设置)时,DocumentCompleted
事件被多次触发。
在构建输出窗口中,查找以下警告:
"发现同一从属程序集的不同版本之间存在冲突"
如果您发现此警告,请确保所有程序集使用冲突的引用程序集的相同版本,并重新检查WebBrowser是否提供您的事件。