我正在尝试实现简单的网页截屏程序。当我在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循环中无限期地挂起。有什么想法吗?
答案 0 :(得分:5)
这样的事情:
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.
}
}
我希望这可以帮助你完成任务。
答案 1 :(得分:0)
在构建输出窗口中,查找以下警告:
“在同一个从属程序集的不同版本之间发现冲突”
如果发现此警告,请确保所有程序集使用相同版本的冲突的Referenced程序集,并重新检查WebBrowser是否发送了您的事件。
答案 2 :(得分:0)
该解决方案令人难以置信。经过数小时的搜索和尝试,我找到了答案。
在webBrowser1
的属性中,设置AllowNavigation = false
。
如果设置为false
,则仅一次注册DocumentCompleted
事件,但是当AllowNavigation = true
(默认情况下)时,将触发DocumentCompleted
事件多次。