想捕获WebBrowser连接指定网站过程中发生的错误信息,包括网络无法连接、404找不到网页等等错误!经过网上的搜集,找到了以下解决方案,该解决方案不会在网站连接前发出多余的测试请求。

向Webbrowser中注册NavigateError事件,以扩展webbrowser:

[ComImport, Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"),
InterfaceType(ComInterfaceType.InterfaceIsIDispatch),
TypeLibType(TypeLibTypeFlags.FHidden)]
public interface DWebBrowserEvents2
{
[DispId()]
void NavigateError(
[In, MarshalAs(UnmanagedType.IDispatch)] object pDisp,
[In] ref object URL, [In] ref object frame,
[In] ref object statusCode, [In, Out] ref bool cancel);
}

自定义NavigateError事件的参数:

using System;
using System.Runtime.InteropServices;
public class WebBrowserNavigateErrorEventArgs : EventArgs
{
private String urlValue;
private String frameValue;
private Int32 statusCodeValue;
private Boolean cancelValue;
public WebBrowserNavigateErrorEventArgs(
String url, String frame, Int32 statusCode, Boolean cancel)
{
urlValue = url;
frameValue = frame;
statusCodeValue = statusCode;
cancelValue = cancel;
}
public String Url
{
get { return urlValue; }
set { urlValue = value; }
}
public String Frame
{
get { return frameValue; }
set { frameValue = value; }
}
public Int32 StatusCode
{
get { return statusCodeValue; }
set { statusCodeValue = value; }
}
public Boolean Cancel
{
get { return cancelValue; }
set { cancelValue = value; }
}
}

扩展webbrowser为MyWebBrowser,在程序中将webbrowser改成Mywebbrowser即可:

using System.Windows.Forms;
using System.Security.Permissions;
using System.Runtime.InteropServices;
using System;
public class MyWebBrowser : WebBrowser
{
AxHost.ConnectionPointCookie cookie;
MyWebBrowserEventHelper helper;
public delegate void WebBrowserNavigateErrorEventHandler(object sender,
WebBrowserNavigateErrorEventArgs e); [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
protected override void CreateSink()
{
base.CreateSink();
// Create an instance of the client that will handle the event
// and associate it with the underlying ActiveX control.
helper = new MyWebBrowserEventHelper(this);
cookie = new AxHost.ConnectionPointCookie(
this.ActiveXInstance, helper, typeof(DWebBrowserEvents2));
}
[PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
protected override void DetachSink()
{
// Disconnect the client that handles the event
// from the underlying ActiveX control.
if (cookie != null)
{
cookie.Disconnect();
cookie = null;
}
base.DetachSink();
}
public event WebBrowserNavigateErrorEventHandler NavigateError;
// Raises the NavigateError event.
protected virtual void OnNavigateError(
WebBrowserNavigateErrorEventArgs e)
{
if (this.NavigateError != null)
{
this.NavigateError(this, e);
}
}
// Handles the NavigateError event from the underlying ActiveX
// control by raising the NavigateError event defined in this class.
private class MyWebBrowserEventHelper :
StandardOleMarshalObject, DWebBrowserEvents2
{
private MyWebBrowser parent;
public MyWebBrowserEventHelper(MyWebBrowser parent)
{
this.parent = parent;
}
public void NavigateError(object pDisp, ref object url,
ref object frame, ref object statusCode, ref bool cancel)
{
// Raise the NavigateError event.
this.parent.OnNavigateError(
new WebBrowserNavigateErrorEventArgs(
(String)url, (String)frame, (Int32)statusCode, cancel));
}
}
}

将以上代码完全复制粘贴到您的程序当中,然后将您原本程序中使用webbrowser的地方修改成MyWebBrowser就行了。这个时候你的mywebbrowser控件就有了onnavigateerror事件,在这个事件里编写您的错误处理方法。您或许需要用到错误消息中的错误代码,具体错误代码请参照里的每个错误代码代表的意义。

本人项目中所使用的错误处理代码如下:

 private void WebBrowserIE_NavigateError(object sender, WebBrowserNavigateErrorEventArgs e)
{
log.Debug("ERROR:----------" + e.Url);
int code = e.StatusCode;
// 发生错误时,转向本地页面
if (code == -)
{ WebBrowserIE.Navigate("本地页面");
}
}

这个扩展方法完全不会影响webbrowser原有的任何功能,当然,您还可以按照这种思路继续进行扩展,比如扩展使其用有mousemove事件,也是可以的!

C# 通过扩展WebBrowser捕获网络连接错误信息的更多相关文章

  1. Macbook Pro升级10.15后百度网盘无法登陆,网络连接错误(-1001)

    兴冲冲升级到10.15,结果百度网盘挂了~QQ 由于长期在境外实验室做研究,百度又封锁了境外登陆,所以客户端是唯一跟家里联络的方式,现在它也挂了感觉整个天都塌下来了. 找了一圈,发现一个特别神奇的解锁 ...

  2. 负载均衡服务TCP端口健康检查成功,为什么在后端业务日志中出现网络连接异常信息?

    负载均衡服务TCP端口健康检查成功,为什么在后端业务日志中出现网络连接异常信息? 原文: https://help.aliyun.com/document_detail/127193.html?spm ...

  3. 网络连接详细信息出现两个自动配置ipv4地址

    问题:网络连接详细信息出现两个自动配置ipv4地址,一个是有效地址,一个是无效地址. 解决办法:先将本地连接ip设置成自动获取,然后点击开始——>运行——>输入cmd,回车,进入命令行界面 ...

  4. OK335xS 网络连接打印信息 hacking

    /*********************************************************************** * OK335xS 网络连接打印信息 hacking ...

  5. 网络连接详细信息出现两个自动配置ipv4地址的解决办法

    问题描述:网络连接详细信息出现两个自动配置ipv4地址,一个是有效地址,一个是无效地址. 解决办法: 先将本地连接ip设置成自动获取 点击开始——>运行——>输入cmd,回车,进入命令行界 ...

  6. asp.net 百度编辑器 UEditor 上传图片 图片上传配置 编辑器配置 网络连接错误,请检查配置后重试

    1.配置ueditor/editor_config.js文件,将 //图片上传配置区 ,imageUrl:URL+"net/imageUp.ashx" //图片上传提交地址 ,im ...

  7. 【Linux 运维】查看网络连接状态信息之netstat和ss命令详解

    一.netstat 常用命令详解 通过man netstat可以查看netstat的帮助信息: netstat 命令:用于显示各种网络相关信息,如网络连接,路由表,接口状态,无效连接,组播成员 等等. ...

  8. 启动fiddler情况下,网络连接错误[Fiddler] The connection to ** failed.解决办法

    这种错误是由于浏览器设置了代理,而代理服务器配置不正确导致 解决办法 1.关闭浏览器服务器代理,设置-高级-网络代理 2.检查网络代理设置是否正确,Fiddler中配置的端口号需要跟浏览器中配置的端口 ...

  9. ueditor图片上传,网络连接错误的解决方案

    错误产生的原因是ueditor/net目录中的Uploader.cs在网站发布之后就没有了,重新上传这个文件,问题就解决了

随机推荐

  1. NOI第一天感想&小结

    嘛...中午总算是到了深圳了--在虹桥机场和飞机上和市队大神们一起讨论各种各样奇(sang)葩(bing)的算(ren)法(lei)还是非常开心的,在此再各种膜拜一下尽管没来比赛的FFT大神@陈中瑞 ...

  2. Python标准库简介

    在<Python语言参考手册>描述中的描述Python语法和语义,而本手冊主要介绍了Python标准库的内容和使用,也介绍了一些发行库里可选的组件库. Python标准库包括的内容是非常广 ...

  3. Canvas 生成base64的PNG图片快照,So Amazing!!!

    function canvasSupport(){     return Modernizr.canvas;}function callCanvasApps(){  var canvasOne=doc ...

  4. UVa753/POJ1087_A Plug for UNIX(网络流最大流)(小白书图论专题)

    解题报告 题意: n个插头m个设备k种转换器.求有多少设备无法插入. 思路: 定义源点和汇点,源点和设备相连,容量为1. 汇点和插头相连,容量也为1. 插头和设备相连,容量也为1. 可转换插头相连,容 ...

  5. 我的MYSQL学习心得(五)

    原文:我的MYSQL学习心得(五) 我的MYSQL学习心得(五) 我的MYSQL学习心得(一) 我的MYSQL学习心得(二) 我的MYSQL学习心得(三) 我的MYSQL学习心得(四) 我的MYSQL ...

  6. SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环

    原文:SSIS从理论到实战,再到应用(5)----流程控制之Foreach循环 上期回顾: SSIS从理论到实战,再到应用(4)----流程控制之For循环 上一期讲了For循环,Foreach循环相 ...

  7. bigdata_spark_源码修改_本地环境搭建_eclise

    Eclipse 下开发调试环境的配置该小节中使用的各项工具分别为:mac (Windows 7)+Eclipse Java EE 4.4.2+Scala 2.10.4+Sbt 0.13.8+Maven ...

  8. 浅谈 js 正则字面量 与 new RegExp 执行效率

    原文:浅谈 js 正则字面量 与 new RegExp 执行效率 前几天谈了正则匹配 js 字符串的问题:<js 正则学习小记之匹配字符串> 和 <js 正则学习小记之匹配字符串优化 ...

  9. HDU 2616 Kill the monster (暴力搜索 || 终极全阵列暴力)

    主题链接:HDU 2616 Kill the monster 意甲冠军:有N技能比赛HP有M怪物,技能(A,M),能伤害为A.当怪兽HP<=M时伤害为2*A. 求打死怪兽(HP<=0)用的 ...

  10. csdn 博客,你很努力,有人帮你-2015年03一个月17日本

    今天泛化 开始使用简书 正则表达式的博客写了两篇文章 回顾 Core Data 基本使用 总结 Xcode6新特性 简单聊聊 简书,事实上一開始学 MarkDown 语法的时候,已经用了,但是,一直认 ...