Web浏览器不会触发DocumentCompleted事件

时间:2013-03-12 20:31:12

标签: c# multithreading webbrowser-control

我正在尝试实现简单的网页截屏程序。当我在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循环中无限期地挂起。有什么想法吗?

3 个答案:

答案 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事件多次。

相关问题