`

C# WINFORM 捕获全局异常

c# 
阅读更多
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.IO;
namespace GobalException
{
    static class Program
    {
        /// <summary>
        /// 应用程序的主入口点。
        /// </summary>
        [STAThread]
        static void Main()
        {
            try
            {
                //处理未捕获的异常  
                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                //处理UI线程异常  
                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
                //处理非UI线程异常  
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            catch (Exception ex)
            {
                string str = "";
                string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";

                if (ex != null)
                {
                    str = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n异常信息:{2}\r\n",
                         ex.GetType().Name, ex.Message, ex.StackTrace);
                }
                else
                {
                    str = string.Format("应用程序线程错误:{0}", ex);
                }


                writeLog(str);
                MessageBox.Show("发生致命错误,请及时联系作者!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }

        /// <summary>
        ///这就是我们要在发生未处理异常时处理的方法,我这是写出错详细信息到文本,如出错后弹出一个漂亮的出错提示窗体,给大家做个参考
        ///做法很多,可以是把出错详细信息记录到文本、数据库,发送出错邮件到作者信箱或出错后重新初始化等等
        ///这就是仁者见仁智者见智,大家自己做了。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
           
            string str = "";
            string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";
            Exception error = e.Exception as Exception;
            if (error != null)
            {
                str = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n异常信息:{2}\r\n",
                     error.GetType().Name, error.Message, error.StackTrace);
            }
            else
            {
                str = string.Format("应用程序线程错误:{0}", e);
            }

            writeLog(str);   
            MessageBox.Show("发生致命错误,请及时联系作者!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            string str = "";
            Exception error = e.ExceptionObject as Exception;
            string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "\r\n";
            if (error != null)
            {
                str = string.Format(strDateInfo + "Application UnhandledException:{0};\n\r堆栈信息:{1}", error.Message, error.StackTrace);
            }
            else
            {
                str = string.Format("Application UnhandledError:{0}", e);
            }

            writeLog(str);
            MessageBox.Show("发生致命错误,请停止当前操作并及时联系作者!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
        /// <summary>
        /// 写文件
        /// </summary>
        /// <param name="str"></param>
        static void writeLog(string str)
        {
            if (!Directory.Exists("ErrLog"))
            {
                Directory.CreateDirectory("ErrLog");
            }

            using (StreamWriter sw = new StreamWriter(@"ErrLog\ErrLog.txt", true))
            {
                sw.WriteLine(str);
                sw.WriteLine("---------------------------------------------------------");
                sw.Close();
            }
        }
    }
}

转自:http://www.cnblogs.com/kevinGao/archive/2011/11/02/2233420.html

还找到一个例子:
你好!
     一般使用Application的ThreadException事件,可以参考这个例子:
// Creates a class to throw the error.
public class ErrorHandler : System.Windows.Forms.Form {

    // Inserts the code to create a form with a button.

    // Programs the button to throw an exception when clicked.
    private void button1_Click(object sender, System.EventArgs e) {
       throw new ArgumentException("The parameter was invalid");
    }

    public static void Main(string[] args) {
       // Creates an instance of the methods that will handle the exception.
       CustomExceptionHandler eh = new CustomExceptionHandler();

       // Adds the event handler to to the event.
       Application.ThreadException += new ThreadExceptionEventHandler(eh.OnThreadException);

       // Runs the application.
       Application.Run(new ErrorHandler());
    }
}

// Creates a class to handle the exception event.
internal class CustomExceptionHandler {

    // Handles the exception event.
    public void OnThreadException(object sender, ThreadExceptionEventArgs t)
    {
       DialogResult result = DialogResult.Cancel;
       try
       {
          result = this.ShowThreadExceptionDialog(t.Exception);
       }
       catch
       {
          try
          {
             MessageBox.Show("Fatal Error", "Fatal Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
          }
          finally
          {
             Application.Exit();
          }
       }

       // Exits the program when the user clicks Abort.
       if (result == DialogResult.Abort)
          Application.Exit();
    }

    // Creates the error message and displays it.
    private DialogResult ShowThreadExceptionDialog(Exception e) {
       string errorMsg = "An error occurred please contact the adminstrator with the following information:\n\n";
       errorMsg = errorMsg + e.Message + "\n\nStack Trace:\n" + e.StackTrace;
       return MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Stop);
    }
}
分享到:
评论
1 楼 wallimn 2013-10-04  
后面一个试了一下,效果不错。

相关推荐

    Vue2基础实例-实现移动端静态页面(CDN引入方式)

    Vue2基础实例-实现移动端静态页面(CDN引入方式)

    基于vb+access 实现的学籍管理系统毕业设计(论文+源代码)

    【作品名称】:基于vb+access 实现的学籍管理系统【毕业设计】(论文+源代码) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: 本系统主要完成对学生情况和学生成绩的管理,包括数据库中表的添加、修改、删除等。系统还可以完成对各类信息的浏览、查询、添加、删除、修改、报表等功能。 系统的核心是数据库中各个表联系,每一个表的修改都将联动的影响其它的表,当完成对数据的操作时系统会自动地完成数据库的修改。查询功能也是系统的核心之一,在系统中即有单条件查询和多条件查询,也有精确查询和模糊查询,系统不仅有静态的条件查询,也有动态生成的条件查询,其目的都是为了方便用户使用。系统有完整的用户添加、删除和密码修改功能,并具备报表打印功能。 关键字:控件、窗体、数据库、vb6.0、access97。 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

    基于MATLAB汽车框定代码面板GUI(1).zip

    计算机网络期末复习

    软件项目开发,项目管理10条

    软件项目开发,项目管理10条

    三菱plc实例程序61个,机械手、拉丝机、压铸机、啤酒输送、喷泉控制、尿片包装机、模温机、硫化机、碾压机、磨床、泡沫机等等

    两种简单的彩灯闪烁程序.rar 两线控制机械手.rar 两轴伺服控制的PCB自动切边(PLC+ 人机界面)程式.rar 两道FX2N-4AD习题(有程序).rar 六头直径式拉丝机.rar 六层六站电梯.rar 冷却水泵节能循环运行1.rar 冷室压铸机FX PLC程序.zip 力恒锌合金压铸机.rar 啤酒输送无压力系统三菱程序.rar 喷泉控制设计.rar 喷涂.rar 喷涂生产线粉末喷涂控制程序.rar 喷灌控制器.rar 墨西哥纬创二期工程.rar 密码锁门梯形图.rar 尿片包装机.rar 平板硫化机FX2N-PLC加 F940人机.rar 木工机械数控载板锯.rar 某军区恒压供水程序.rar 某生产自动线.rar 某运料小车(cs).rar 某锻压机械厂的80吨冲床程序.rar 模拟量程序,自动跟踪.rar 模温机.rar 模糊控制算法的PLC程序模块.rar 泡沫机.rar 流水线控制.rar 淋膜复合机组.rar 煤矿皮带运输机电控系统.rar 煤质采样程序.rar 瑪斯蘭贰厂壹期.rar 硫化机.rar 碾压机.rar 磨床.rar 磨边机三菱FX程序+人机界面控制

    基于JAVA的高校竞赛和考级查询系统-源码+万字LW.zip

    本次开发的高校竞赛和考级查询系统实现了字典管理、公告管理、教务处管理员管理、竞赛管理、竞赛收藏管理、竞赛留言管理、竞赛报名管理、学院负责人管理、学生管理、指导老师管理、管理员管理等 今天向大家分享一个最新完成的高质量毕业设计项目作品 基于SSM的XXX管理系统 项目评分(最低0分,满分5分) 难度系数:3分 工作量:5分 创新点:3分 界面美化:5分 使用技术 前端: html/js/css/vue 后端:ssm 数据库:MySql 服务器:apache-tomcat 编译器:IntelliJ IDEA 项目管理工具:maven 项目包含内容 (包含毕设全套内容) 项目源码 论文 运行效果视频、部署参考教学视频

    R语言中模型选择与评估的全面实践

    在R语言中,模型选择和评估是一个涉及多个步骤的过程,包括数据预处理、模型训练、超参数调优、模型评估和结果可视化。通过使用caret、ROCR等包,我们可以构建、评估和优化各种机器学习模型。掌握这些技能对于数据科学家和机器学习工程师来说至关重要,它们是构建有效预测模型的基础。

    自定义按钮实现(带图片文字虚线实线边框切换)

    WPF+MVVM 自定义按钮实现(带图片文字虚线实线边框切换),案例给出两种状态变化控制,一种是两个按钮分开控制,通过按钮禁用边框变成虚线表示不可用状态,另一种时一个按钮控制状态变化,改变按钮文字描述和背景图片。详细描述见博客 https://blog.csdn.net/qq_21419015/article/details/143219764

    Logistic回归(分类)问题探讨与实践博文对应的数据和代码

    Logistic回归(分类)问题探讨与实践博文对应的数据和代码。

    为开发人员打造的低代码开发平台 Mybatis-plus关联查询,强大的无代码模型表单页面流程设计能力等全方位赋能

    用上Diboot,大多数SQL都不用写了,代码极大简化,让开发专注于业务;Diboot基础封装的内部实现,确保运行高效率高性能,帮你规避常见的坑。基于Devtools的代码生成能力,后端、前端、关联、复杂主子页面、移动端、非覆盖式更新代码、AI辅助命名... 全支持;零代码不能满足的复杂场景,基于生成后的代码快速扩展,无任何扩展局限性。模型设计、页面设计、表单设计、流程设计、数据大屏 等能力全支持,多数功能直接配;表单与流程解耦,流程挂载多表单,表单灵活复用。零/低/全代码之间顺畅融合,自由切换。多数常规功能零代码搭建即用;复杂功能支持集成自定义手写页面、支持生成前后端代码自由扩展; 为开发人员打造的低代码开发平台。Mybatis-plus关联查询,关联无SQL,性能高10倍,前后端代码本地可视化生成,flowable工作流,spring cloud微服务,强大的无代码模型表单页面流程设计能力等全方位赋能!

    百度域名动态解析DDns

    自动根据动态域名配置信息解析域名,类似花生壳动态域名解析功能

    跟岗实习提交材料.zip

    跟岗实习提交材料.zip

    Mqtt消息模拟程序,模拟发送MQTT数据

    Mqtt消息模拟程序,模拟发送MQTT数据

    TL-ER3220G V4.0升级软件20221207-3.0.4

    TL-ER3220G V4.0升级软件20221207_3.0.4

    【永磁电机】基于matlab四模块永磁轮毂电机的容错控制策略仿真【含Matlab源码 期】.zip

    CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    算法与数据结构-综合提升 C++版

    算法与数据结构-综合提升 C++版 资源列表: 00-0pening 01-Why-Algorithms 02-Sorting-Basic 03-Sorting-Advance 04-Heap 05-Binary-Search-Tree 06-Union-Find 07-Graph-Basics08-Minimum-Span-Trees 09-Shortest-Path 10-Ending

    红薯无印高清图提取.zip

    红薯无印高清图提取.zip

    22应统3 玛依拉 220110780519 作业2.ipynb

    22应统3 玛依拉 220110780519 作业2.ipynb

    5G NR GSCN计算SSB的NARFCN MATLAB实现

    本期给大家带来5G NR中已知GSCN如何计算对应的 SSB 绝对射频信道号NARFCN,根据gscn先计算出中心频率,再根据中心频率反推NARFCN,用MATLAB实现,参考3GPP 38.104,欢迎一起交流

    基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)

    基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计),该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕业设计)基于深度学习的垃圾识别与分类算法研究源码(高分毕

Global site tag (gtag.js) - Google Analytics