winform程序捕获全局异常,对错误信息写入日志并弹窗
使用场景:在winform程序中如果没对方法进行try catch操作,若方法内出错,则整个程序报错并退出,如下图
如果程序已在客户手中,若没对错误的详细信息进行拍照,我们则不知道错误原因是什么。我们需要能捕获整个程序的错误信息,一旦程序出错,则跳到我们指定的方法中,执行错误信息的报错以及友好的错误提示(也可以不提示,直接退出程序)。
实现代码如下:(代码放置位置:在Program.cs文件中的Main方法中)
static class Program
{/// <summary>/// 应用程序的主入口点。/// </summary>[STAThread]static void Main(){try{//处理未捕获的异常 Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);//处理UI线程异常 Application.ThreadException += Application_ThreadException;//处理非UI线程异常 AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new Form1());}catch (Exception ex){var strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now + "\r\n";var str = string.Format(strDateInfo + "异常类型:{0}\r\n异常消息:{1}\r\n异常信息:{2}\r\n",ex.GetType().Name, ex.Message, ex.StackTrace);WriteLog(str);//日志写入MessageBox.Show("发生错误,请查看程序日志!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);//进行弹窗提示Environment.Exit(0);}}/// <summary>///错误弹窗/// </summary>/// <param name="sender"></param>/// <param name="e"></param>static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e){string str;var strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now + "\r\n";var error = e.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);Environment.Exit(0);}static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e){var error = e.ExceptionObject as Exception;var strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now + "\r\n";var str = error != null ? string.Format(strDateInfo + "Application UnhandledException:{0};\n\r堆栈信息:{1}", error.Message, error.StackTrace) : string.Format("Application UnhandledError:{0}", e);WriteLog(str);MessageBox.Show("发生错误,请查看程序日志!", "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);Environment.Exit(0);}/// <summary>/// 写文件/// </summary>/// <param name="str"></param>static void WriteLog(string str){if (!Directory.Exists("ErrLog")){Directory.CreateDirectory("ErrLog");}using (var sw = new StreamWriter(@"ErrLog\ErrLog.txt", true)){sw.WriteLine(str);sw.WriteLine("---------------------------------------------------------");sw.Close();}}}
winform程序捕获全局异常,对错误信息写入日志并弹窗相关推荐
- 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常
毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里.所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命.下面我们主要讨论的是如 ...
- springboot怎么捕获全局异常
学习目标: java中的异常和错误 学习内容: 首页要了解什么是异常什么是错误 捕捉全局异常 自定义异常 一.java中异常和错误的区别 Error类和Exception类的父类都是throwable ...
- python读取日志错误信息_使用Python将Exception异常错误堆栈信息写入日志文件
假设需要把发生异常错误的信息写入到log.txt日志文件中去: import traceback import logging logging.basicConfig(filename='log.tx ...
- android捕获全局异常,并对异常做出处理
2019独角兽企业重金招聘Python工程师标准>>> 在做项目时,经常会把错误利用异常抛出去,这样在开发时就可以通过手机抛的异常排查错误,很方便.但是当程序开发完毕,版本稳定,需要 ...
- python把异常写入文件_使用Python将Exception异常错误堆栈信息写入日志文件代码
本篇文章小编给大家分享一下使用Python将Exception异常错误堆栈信息写入日志文件代码及补充知识,对大家的学习有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看 ...
- 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件...
小程序导入,别人导出的数据库json文件,错误信息如下: 导入数据库失败, Error: Poll error, 导入数据任务(id:373985)异常,错误信息:解析导入文件错误,请检查导入文件内容 ...
- 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件
导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件 参考文章: (1)导入数据任务(id:373985)异常, 错误信 ...
- PHP 捕获全局异常
PHP 捕获全局异常 参考文章: (1)PHP 捕获全局异常 (2)https://www.cnblogs.com/yaomao/p/11260388.html (3)https://www.java ...
- 程序员最痛苦的事,就是程序出错;程序员最最痛苦的事,就是程序出错了还没有错误信息!--IIS Service Unavailable 问题如何解决...
今天有人问如何处理IIS网站出现"Service Unavailable"的情况. 在网上google了一下,导致这个出错的原因很多,而"Service Unavaila ...
最新文章
- NLP任务非Transformer不可?
- luogu P4258 [WC2016]挑战NPC(一般图的最大匹配,带花树,建图、拆点技巧)
- [Shell] 文件名截取的问题:bash .vs. csh
- NSIS设置桌面快捷方式的图标
- ATL的GUI程序设计(前言)
- php中字符串分割函数
- LiveVideoStackCon技术培训 限量买1赠1
- cdev 结构体与字符设备的注册
- 【渝粤题库】陕西师范大学700009 现代生物科技
- windows如何生成ssh密钥
- MyBatis中字符串拼接实现模糊查询的sql
- Visual Studio 与 Eclipse,谁是最强 IDE?
- Swift新手教程3-字符串String
- sql代码格式化_使用SQL格式化程序选项管理SQL代码格式化
- python中的猴子补丁Monkey Patch
- java qua_Qua Vadis Eclipse? 第一部分
- Docker基础(centos安装、阿里云镜像加速器配置、常用命令、数据卷、DockerFile、镜像推送阿里云等)
- hdu 1859 最小长方形
- STEP7主站与远程I/O组网_过路老熊_新浪博客
- sgu482 Impudent Thief (动态规划)