C# WPF-如何知道浏览器加载网页时是否有错误?

C# WPF-如何知道浏览器加载网页时是否有错误?,c#,.net,wpf,C#,.net,Wpf,WPF应用程序-我想知道网页加载是成功还是失败。也就是说,我应该能够知道浏览器是否有类似“此页面无法显示”的错误。我正在我的应用程序中托管一种形式的web浏览器控件。请提供帮助。您可以添加对Microsoft Internet控件(SHDocVw)的引用。然后,您可以从wpf web浏览器控件获取activeX浏览器控件并订阅其事件 导航过程中发生错误时,将引发该事件 void MainWindow_Loaded(object sender, RoutedEventArgs e) { v

WPF应用程序-我想知道网页加载是成功还是失败。也就是说,我应该能够知道浏览器是否有类似“此页面无法显示”的错误。我正在我的应用程序中托管一种形式的web浏览器控件。请提供帮助。

您可以添加对
Microsoft Internet控件(SHDocVw)
的引用。然后,您可以从wpf web浏览器控件获取activeX浏览器控件并订阅其事件

导航过程中发生错误时,将引发该事件

void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    var axBrowser = this.wpfWebBrowser1.GetType().InvokeMember("ActiveXInstance",
        BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
        null, wpfWebBrowser1, new object[] { }) as SHDocVw.WebBrowser;
    axBrowser.NavigateError += axBrowser_NavigateError;
    this.wpfWebBrowser1.Navigate("http://google.com/xxxxxxx"); //status: 404
    //this.wpfWebBrowser1.Navigate("http://elgoog.com"); //status: -2146697211
}

void axBrowser_NavigateError(object pDisp, ref object URL, ref object Frame, 
                             ref object StatusCode, ref bool Cancel)
{
    MessageBox.Show(StatusCode.ToString());
}
在上面的代码中,我假设您有一个名为
wpfWebBrowser1

不要忘记使用System.Reflection添加

不要忘记将
main window\u Loaded
分配给窗口的
Loaded
事件。

别忘了添加对Microsoft Internet控件的引用
您可以添加对
Microsoft Internet控件(SHDocVw)
的引用。然后,您可以从wpf web浏览器控件获取activeX浏览器控件并订阅其事件

导航过程中发生错误时,将引发该事件

void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
    var axBrowser = this.wpfWebBrowser1.GetType().InvokeMember("ActiveXInstance",
        BindingFlags.GetProperty | BindingFlags.Instance | BindingFlags.NonPublic,
        null, wpfWebBrowser1, new object[] { }) as SHDocVw.WebBrowser;
    axBrowser.NavigateError += axBrowser_NavigateError;
    this.wpfWebBrowser1.Navigate("http://google.com/xxxxxxx"); //status: 404
    //this.wpfWebBrowser1.Navigate("http://elgoog.com"); //status: -2146697211
}

void axBrowser_NavigateError(object pDisp, ref object URL, ref object Frame, 
                             ref object StatusCode, ref bool Cancel)
{
    MessageBox.Show(StatusCode.ToString());
}
在上面的代码中,我假设您有一个名为
wpfWebBrowser1

不要忘记使用System.Reflection添加

不要忘记将
main window\u Loaded
分配给窗口的
Loaded
事件。


别忘了添加一个参考
Microsoft Internet Controls

,很遗憾,您不能添加(除非您解决了附加到
导航
加载
的问题,并假设它在超时后失败)
NavigateError
COM对象公开的事件不会附加到internal
WebBrowserEvent
类中的任何内容,除非您重写他们的一些代码以附加接收器并使用反射来读取
HostingAdaptor
属性,你运气不好。如果你检测到导航错误就够了吗?@AdrianoRepetti-是的,你是对的,我用了很多小技巧,但问题并没有解决。我尝试读取浏览器文档中的错误文本,也尝试在documentcompleted中创建新的请求和响应,但这两种方法都不理想。无论如何,感谢您的回复。@RezaAghaei-NavigateError事件未附加在内部WebBrowserEvent中。所以我找不到它。你可以找到它,检查下面的答案。不幸的是,你不能(除非你解决了附加到
导航
加载
的问题,并假设它在超时后失败)
NavigateError
COM对象公开的事件不会附加到internal
WebBrowserEvent
类中的任何内容,除非您重写他们的一些代码以附加接收器并使用反射来读取
HostingAdaptor
属性,你运气不好。如果你检测到导航错误就够了吗?@AdrianoRepetti-是的,你是对的,我用了很多小技巧,但问题并没有解决。我尝试读取浏览器文档中的错误文本,也尝试在documentcompleted中创建新的请求和响应,但这两种方法都不理想。无论如何,感谢您的回复。@RezaAghaei-NavigateError事件未附加在内部WebBrowserEvent中。所以我找不到它。你可以找到它,检查下面的答案。是的,但有一个错误。找不到类型或命名空间名称“SHDocVw”(是否缺少using指令或程序集引用?)。请添加对Microsoft Internet控件的引用。
。太好了。最后这对我很有用。感谢您的帮助。在代码片段中,什么是
this.wb
wpfWebBrowser1
?它们是WPF网络控制的同一个实例吗?@LeonardoSeccia是的,在这里重命名是我的错误。谢谢你对此发表评论。是的,但有一个错误。找不到类型或命名空间名称“SHDocVw”(是否缺少using指令或程序集引用?)。请添加对Microsoft Internet控件的引用。
。太好了。最后这对我很有用。感谢您的帮助。在代码片段中,什么是
this.wb
wpfWebBrowser1
?它们是WPF网络控制的同一个实例吗?@LeonardoSeccia是的,在这里重命名是我的错误。谢谢你发表评论。