使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示

时间:2021-07-28 17:42:09

  WinForm程序开发中,在开发模式下对于异常的处理一般都是通过调试的方式来查找异常发生的未知与原因。

下面以“除数为0”的情况来具体说明。

使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示

Button按钮事件如下:

 private void button1_Click(object sender,EventArgs e)
{
int numA = ;
int numB = ; try
{
decimal result = numA / numB;
}
catch(Exception ex)
{
throw ex;
}
}

编译后运行程序,点击按钮,抛出异常

使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示

上图中虽然提示出“尝试除以零”的异常信息,但是“详细信息”按钮下显示的具体提示信息显示的不是很友好。

下面给出一种更加友好的处理方式,在开发与测试时都可以使用。

微软的SQL Server数据库产品中提供了非常多的公用DLL。

如果你的SQLSERVER安装在C盘的话,下面的路径就是相应SQLSERVER版本的公用DLL的存放路径

SQL2005  C:Program FilesMicrosoft SQL Server90SDKAssemblies

使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示

使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示

SQL2008  C:Program FilesMicrosoft SQL Server100SDKAssemblies

使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示

其中Microsoft.ExceptionMessageBox.dll 中的  ExceptionMessageBox 类 提供了显示异常详细信息的弹窗处理功能。

项目中首先添加该dll的引用

使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示

并添加Using引用

使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示

Button按钮事件修改如下:

  bool alwaysShow = true; //定义全局变量,用于控制是否每次都显示相同的异常信息

         private void button1_Click(object sender,EventArgs e)
{
int numA = ;
int numB = ; try
{
decimal result = numA / numB;
}
catch(Exception ex)
{
if(alwaysShow)
{
ExceptionMessageBox msgBox = new ExceptionMessageBox();
msgBox.InnerException = ex;
msgBox.Text = "异常信息!"; //获取或设置要在异常消息框中显示的*消息的文本
msgBox.Caption = "测试异常"; //获取或设置异常消息框的对话框标题 msgBox.Beep = true; //指定在显示消息时是否播放可听到的声音 msgBox.ShowToolBar = true; msgBox.Buttons = ExceptionMessageBoxButtons.OKCancel; //获取或设置要在消息框中显示的按钮
msgBox.SetButtonText("确定","取消"); msgBox.ShowCheckBox = true;
msgBox.IsCheckBoxChecked = true;
msgBox.CheckBoxText = "总是显示该信息"; msgBox.HelpLink = ex.HelpLink; //获取或设置指向与*消息相关联的帮助文件或帮助网页的链接 DialogResult dr = msgBox.Show(this); if(dr == DialogResult.OK)
{
MessageBox.Show("点击了【确定】按钮!" + ex.StackTrace);
} alwaysShow = msgBox.IsCheckBoxChecked;
}
}
}
ExceptionMessageBox 类提供了弹窗显示异常信息的功能。
编译后再次运行程序,点击

使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示

点击左下角的第2个按钮【显示详细的技术信息】,弹出如下窗体,

使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示

该窗体中把所有的异常信息以树状方式列出,点击不同的树节点,右侧显示对应具体的异常信息。

该中展现方式更加直观明了,更便于开发环境下异常的跟踪与处理。

关于ExceptionMessageBox更加详细的信息请参考MSDN:

https://msdn.microsoft.com/zh-cn/library/microsoft.sqlserver.messagebox.exceptionmessagebox.aspx

使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示的更多相关文章

  1. 如何捕获winform程序全局异常?(续)

    前言 上篇文章我提供了一种方案可以供我们捕获单线程程序中的所有未处理异常.但是如果程序是多线程,那么新增线程出现了异常上个方案就无能为力了.本着方案总比问题多的态度,我再给大家提供一种新的方案,供大家 ...

  2. 如何捕获winform程序全局异常?

    1.在C#中我们如何处理异常? 上面的问题学过C#的问题大家可能都能回答处理,用try-catch-finally具体如下: try { //可能出错的语句 } catch (Exception) { ...

  3. 转:如何捕获winform程序全局异常?

    前言 上篇文章我提供了一种方案可以供我们捕获单线程程序中的所有未处理异常.但是如果程序是多线程,那么新增线程出现了异常上个方案就无能为力了.本着方案总比问题多的态度,我再给大家提供一种新的方案,供大家 ...

  4. C#使用IrisSkin2.dll美化WinForm程序界面

    一.添加控件IrisSkin2.dll. 方法:         1.右键“工具箱”.“添加选项卡”,取名“皮肤”.         2.右键“皮肤”,“选择项”弹出对话框        3.点击“浏 ...

  5. 在Winform程序中设置管理员权限及为用户组添加写入权限

    在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行程序具有管理员权限或者设置运行程序的目录具有写入的权限,如果是在操作系统里面,我们可以设置运行程序以管理员身 ...

  6. (转)在Winform程序中设置管理员权限及为用户组添加写入权限

    本文转载自:http://www.cnblogs.com/wuhuacong/p/5645172.html 在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行 ...

  7. WinForm程序中两份mdf文件问题的解决

    在项目中用程序中嵌入mdf文件的方式来进行SQLServer数据库开发非常方便,用来发布开源项目等很方便,点击就可以运行,免部署,特别是在教学中用起来更加方便,老师不用先将数据库文件detach再发给 ...

  8. 在C#中winform程序中应用nlog日志工具

    在C#中winform程序中应用nlog日志工具,配置文件简单应用. 文件名 nlog.config,请注意修改属性为"始终复制",发布时候容易遇到不存在文件的错误提示. 通过Nu ...

  9. C# 将dll打包到程序中

    本文告诉大家如何把 dll 打包到程序中.很多时候的 软件 在运行的时候需要包括很多 dll 或其他的文件,这样的软件在给其他小伙伴,就需要做一个压缩包,或者用安装软件.这样感觉不太好,所以本文告诉大 ...

随机推荐

  1. 使用vs2010创建、发布、部署、调用 WebService

    原文地址:使用vs2010创建.发布.部署.调用 WebService作者:吴超 一 使用vs2010创建 WebService 1 打开VS2010,菜单    文件->新建->项目2 ...

  2. Socket网络编程例子

    1.为了安全的进行通信,基于ACK确认机制----重传机制 使用selector机制的多路复用的IO通信机制,此外还有epoll控制 业务挂接点或者接入点: 常见的接入点: RDBMS进行CRUD M ...

  3. windows下删除服务的方法

    删除的办法有两个: 办法一: 用sc.exe这个Windows命令 开始——运行——cmd.exe,然后输入sc就可以看到了.使用办法很简单: sc delete "服务名" (如 ...

  4. Nginx+uwsgi+supervisor+Ubuntu+flask

    Nginx+uwsgi+supervisor+Ubuntu+flask Nginx+uwsgi+supervisor在Ubuntu上部署flask应用 网上找了许多讲关于Flask应用部署的文章几乎都 ...

  5. 关于安卓HTTP请求用HttpUrlConnection还是HttpClient好

    安卓和JAVA应用开发少不了要提交HTTP请求,而基本上目前有两个实现方式:HttpUrlConnection(即URL.openConnection)和HttpClient. 网上不少人都认为Htt ...

  6. luogu P2303 [SDOi2012]Longge的问题

    传送门 \[\sum_{i=1}^{n}\gcd(i,n)\] 考虑枚举所有可能的gcd,可以发现这一定是\(n\)的约数,当\(\gcd(i,n)=x\)时,\(gcd(\frac{i}{x},\f ...

  7. 说说前端那些事之ajax

    原生ajax请求 前些日子,忙着考驾照,没有时间对知识进行总结,感到十分惭愧啊,刚好趁现在有时间,做个知识总结,希望对各位有所帮助. 很多人都知道ajax是用来进行数据请求的,但是具体的请求方法会有些 ...

  8. 4 伪ajax:jsonp、cors 跨域请求

    一.同源策略 https://www.cnblogs.com/yuanchenqi/articles/7638956.html 同源策略(Same origin policy)是一种约定,它是浏览器最 ...

  9. POPSpring动画参数详解

    POPSpring动画参数详解 效果 源码 https://github.com/YouXianMing/Animations // // POPSpringParameterController.m ...

  10. 用c写了个后台扫描

    /** * Notice: The program is not debug on internet and not use thread supervene. * date : 6-26 * aut ...