使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示
WinForm程序开发中,在开发模式下对于异常的处理一般都是通过调试的方式来查找异常发生的未知与原因。
下面以“除数为0”的情况来具体说明。

Button按钮事件如下:
private void button1_Click(object sender,EventArgs e)
{
int numA = ;
int numB = ; try
{
decimal result = numA / numB;
}
catch(Exception ex)
{
throw ex;
}
}
编译后运行程序,点击按钮,抛出异常

上图中虽然提示出“尝试除以零”的异常信息,但是“详细信息”按钮下显示的具体提示信息显示的不是很友好。
下面给出一种更加友好的处理方式,在开发与测试时都可以使用。
微软的SQL Server数据库产品中提供了非常多的公用DLL。
如果你的SQLSERVER安装在C盘的话,下面的路径就是相应SQLSERVER版本的公用DLL的存放路径
SQL2005 C:Program FilesMicrosoft SQL Server90SDKAssemblies


SQL2008 C:Program FilesMicrosoft SQL Server100SDKAssemblies

其中Microsoft.ExceptionMessageBox.dll 中的 ExceptionMessageBox 类 提供了显示异常详细信息的弹窗处理功能。
项目中首先添加该dll的引用

并添加Using引用

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 类提供了弹窗显示异常信息的功能。
编译后再次运行程序,点击

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

该窗体中把所有的异常信息以树状方式列出,点击不同的树节点,右侧显示对应具体的异常信息。
该中展现方式更加直观明了,更便于开发环境下异常的跟踪与处理。
关于ExceptionMessageBox更加详细的信息请参考MSDN:
https://msdn.microsoft.com/zh-cn/library/microsoft.sqlserver.messagebox.exceptionmessagebox.aspx
使用Microsoft.ExceptionMessageBox.dll捕获WinForm程序中异常信息并弹窗显示的更多相关文章
- 如何捕获winform程序全局异常?(续)
前言 上篇文章我提供了一种方案可以供我们捕获单线程程序中的所有未处理异常.但是如果程序是多线程,那么新增线程出现了异常上个方案就无能为力了.本着方案总比问题多的态度,我再给大家提供一种新的方案,供大家 ...
- 如何捕获winform程序全局异常?
1.在C#中我们如何处理异常? 上面的问题学过C#的问题大家可能都能回答处理,用try-catch-finally具体如下: try { //可能出错的语句 } catch (Exception) { ...
- 转:如何捕获winform程序全局异常?
前言 上篇文章我提供了一种方案可以供我们捕获单线程程序中的所有未处理异常.但是如果程序是多线程,那么新增线程出现了异常上个方案就无能为力了.本着方案总比问题多的态度,我再给大家提供一种新的方案,供大家 ...
- C#使用IrisSkin2.dll美化WinForm程序界面
一.添加控件IrisSkin2.dll. 方法: 1.右键“工具箱”.“添加选项卡”,取名“皮肤”. 2.右键“皮肤”,“选择项”弹出对话框 3.点击“浏 ...
- .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件
系列目录 [已更新最新开发文章,点击查看详细] WebView2组件支持在WinForm.WPF.WinUI3.Win32应用程序中集成加载Web网页功能应用.本篇主要介绍如何在WinForm ...
- .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件
系列目录 [已更新最新开发文章,点击查看详细] 在我的博客<.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件>中介绍了WinForm ...
- 在Winform程序中设置管理员权限及为用户组添加写入权限
在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行程序具有管理员权限或者设置运行程序的目录具有写入的权限,如果是在操作系统里面,我们可以设置运行程序以管理员身 ...
- (转)在Winform程序中设置管理员权限及为用户组添加写入权限
本文转载自:http://www.cnblogs.com/wuhuacong/p/5645172.html 在我们一些Winform程序中,往往需要具有一些特殊的权限才能操作系统文件,我们可以设置运行 ...
- WinForm程序中两份mdf文件问题的解决
在项目中用程序中嵌入mdf文件的方式来进行SQLServer数据库开发非常方便,用来发布开源项目等很方便,点击就可以运行,免部署,特别是在教学中用起来更加方便,老师不用先将数据库文件detach再发给 ...
随机推荐
- DELPHI判断是否64位操作系统
function IsWin64: Boolean;var Kernel32Handle: THandle; IsWow64Process: function(Handle: Windows.TH ...
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
- js原生继承之——组合式继承实例
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- IOS开发缓存机制之—本地缓存机制
功能需求 这个缓存机制满足下面这些功能. 1.可以将数据缓存到本地磁盘. 2.可以判断一个资源是否已经被缓存.如果已经被缓存,在请求相同的资源,先到本地磁盘搜索. 3.可以判断文件缓存什么时候过期.这 ...
- ARPU值分析
每用户平均收入(“ARPU)它由一个消费群体消费总额除以群体总人数得到. 活跃付费账户(“APA”) 平均同时在线玩家人数(“ACU”) 最高同时在线玩家人数(“PCU”)同时在线玩家数最高峰. 千人 ...
- POJ1221(整数划分)
UNIMODAL PALINDROMIC DECOMPOSITIONS Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 543 ...
- .NET Core 最小化发布
.NET Core 应用最小化独立部署发布,.NET Core 默认应用独立发布,大概占用50m左右的空间,不同的系统大小有所区别. .NET Core 的发布之前我也有所介绍,.NET Core 跨 ...
- 自定义IHttpModule
HttpModule作用是 IIS将接收到的请求分发给相应的ISAPI处理前,先截获该请求. 通过这个我们可以完成很多额外功能. 自定义IHttpModule的例子: 通过自定义HttpModule, ...
- BOM之history对象(转)
前面的话 history对象保存着用户上网的历史记录,从窗口被打开的那一刻算起.由于安全方面的考虑,开发人员无法得到用户浏览器的URL,但借由用户访问过的页面列表,可以在不知道实际URL的情况下实现后 ...
- 详解Google Chrome浏览器(操作篇)(一)
开篇概述 在上篇博客中详解Google Chrome浏览器(理论篇)一文中,主要讲解了Chrome 搜索引擎使用.Chrome安装和基本操作.Chrome 基本架构.多线程等原理性问题,这篇将重点讲解 ...