4

我正在尝试实现简单的网页截屏程序。当我在 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循环中。有任何想法吗?

4

3 回答 3

6

像这样的东西:

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.
    }
}

我希望这对您的探索有所帮助。

于 2013-03-12T20:49:28.000 回答
0

在您的构建输出窗口中,查找以下警告:

发现同一依赖程序集的不同版本之间存在冲突

如果您发现此警告,请确保所有程序集都使用相同版本的冲突引用程序集,并重新检查 WebBrowser 是否传递您的事件。

于 2017-02-23T00:51:20.440 回答
0

解决方案令人难以置信。经过数小时的搜索和尝试,我找到了答案。

在 的属性中webBrowser1,我设置了AllowNavigation = false.

如果设置为false,它只注册DocumentCompleted一次事件,但是当AllowNavigation = true(默认情况下)时,DocumentCompleted事件会被触发多次。

于 2018-08-19T06:21:35.570 回答