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程序中异常信息并弹窗显示的更多相关文章

  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. .NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] WebView2组件支持在WinForm.WPF.WinUI3.Win32应用程序中集成加载Web网页功能应用.本篇主要介绍如何在WinForm ...

  6. .NET混合开发解决方案8 WinForm程序中通过设置固定版本运行时的BrowserExecutableFolder属性集成WebView2控件

    系列目录     [已更新最新开发文章,点击查看详细] 在我的博客<.NET混合开发解决方案7 WinForm程序中通过NuGet管理器引用集成WebView2控件>中介绍了WinForm ...

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

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

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

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

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

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

随机推荐

  1. java_web学习(1)理解JavaBean

    JavaBean简介       JavaBean是一种特殊的 Java 类,它遵从一定的设计模式,开发工具和其他组件可以根据这种模式来调用JavaBean. JavaBean可以设计得像Swing组 ...

  2. js原生写的微博留言板有angularjs效果

    1.HTML: <!DOCTYPE html><html><head lang="en">    <meta charset=" ...

  3. TForm类

    显示给用户的窗体有两种:有模式和无模式的.具体使用哪一种窗体,取决于是否希望用户能够同时与这个窗体和其他窗体交互. 1.当打开一个模式窗体后,用户无法与应用程序的其他部分交互,知道用户关闭了这个窗体. ...

  4. Varnish+Xcache构建高性能WEB构架初探

    本文主要讲述web优化方案和缓存工具的调研及使用.根据目前的测试结果来看,采用varnish+xcache作为 apache和 php缓存这种架构具有高并发.高稳定性,易扩展等优点,服务器的动态请求处 ...

  5. ios NSString拼接方法总结

    NSString* string; // 结果字符串 02 NSString* string1, string2; //已存在的字符串,需要将string1和string2连接起来 03   04 / ...

  6. iOS之内存分析

    静态内存分析(Product->Analyze) 静态内存分析是不运行程序,直接对代码进行分析. 但是没有真正分配内存,根据代码的上下文的语法结构,来分析是否有内存泄露 缺点:不一定准确,但是如 ...

  7. js精要之继承

    // 继承object.prototype的方法 // hasOwnProperty() //检查是否存在一个给定名字的自有属性 // propertyIsEnumerable() // 检查一个自有 ...

  8. Wireshark网络抓包(四)——工具

    一.基本信息统计工具 1)捕获文件属性(Summary) 1. File:了解抓包文件的各种属性,例如抓包文件的名称.路径.文件所含数据包的规模等信息 2. Time:获悉抓包的开始.结束和持续时间 ...

  9. 矢量切片(Vector tile)

    说明:本月的主要工作都是围绕制作矢量切片这一个核心问题进行的,所以2月的主题就以这个问题为主,目前分支出来的一些内容主要包括了TMS(Tile map service),OpenLayers3中的Pr ...

  10. 基于vue2+vuex2+vue-router+axios+elementUI做的自动化后台模板

    github地址:https://github.com/sailengsi/sls-admin 此项目重点突出在架构上模式,这个架构模式,可以让我们在开发中,很方便的拓展与维护,并且可以保持结构清晰的 ...