使用场景:在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程序捕获全局异常,对错误信息写入日志并弹窗相关推荐

  1. 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常

    毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里.所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命.下面我们主要讨论的是如 ...

  2. springboot怎么捕获全局异常

    学习目标: java中的异常和错误 学习内容: 首页要了解什么是异常什么是错误 捕捉全局异常 自定义异常 一.java中异常和错误的区别 Error类和Exception类的父类都是throwable ...

  3. python读取日志错误信息_使用Python将Exception异常错误堆栈信息写入日志文件

    假设需要把发生异常错误的信息写入到log.txt日志文件中去: import traceback import logging logging.basicConfig(filename='log.tx ...

  4. android捕获全局异常,并对异常做出处理

    2019独角兽企业重金招聘Python工程师标准>>> 在做项目时,经常会把错误利用异常抛出去,这样在开发时就可以通过手机抛的异常排查错误,很方便.但是当程序开发完毕,版本稳定,需要 ...

  5. python把异常写入文件_使用Python将Exception异常错误堆栈信息写入日志文件代码

    本篇文章小编给大家分享一下使用Python将Exception异常错误堆栈信息写入日志文件代码及补充知识,对大家的学习有一定的帮助,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看 ...

  6. 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件...

    小程序导入,别人导出的数据库json文件,错误信息如下: 导入数据库失败, Error: Poll error, 导入数据任务(id:373985)异常,错误信息:解析导入文件错误,请检查导入文件内容 ...

  7. 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件

    导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件 参考文章: (1)导入数据任务(id:373985)异常, 错误信 ...

  8. PHP 捕获全局异常

    PHP 捕获全局异常 参考文章: (1)PHP 捕获全局异常 (2)https://www.cnblogs.com/yaomao/p/11260388.html (3)https://www.java ...

  9. 程序员最痛苦的事,就是程序出错;程序员最最痛苦的事,就是程序出错了还没有错误信息!--IIS Service Unavailable 问题如何解决...

    今天有人问如何处理IIS网站出现"Service Unavailable"的情况. 在网上google了一下,导致这个出错的原因很多,而"Service Unavaila ...

最新文章

  1. NLP任务非Transformer不可?
  2. luogu P4258 [WC2016]挑战NPC(一般图的最大匹配,带花树,建图、拆点技巧)
  3. [Shell] 文件名截取的问题:bash .vs. csh
  4. NSIS设置桌面快捷方式的图标
  5. ATL的GUI程序设计(前言)
  6. php中字符串分割函数
  7. LiveVideoStackCon技术培训 限量买1赠1
  8. cdev 结构体与字符设备的注册
  9. 【渝粤题库】陕西师范大学700009 现代生物科技
  10. windows如何生成ssh密钥
  11. MyBatis中字符串拼接实现模糊查询的sql
  12. Visual Studio 与 Eclipse,谁是最强 IDE?
  13. Swift新手教程3-字符串String
  14. sql代码格式化_使用SQL格式化程序选项管理SQL代码格式化
  15. python中的猴子补丁Monkey Patch
  16. java qua_Qua Vadis Eclipse? 第一部分
  17. Docker基础(centos安装、阿里云镜像加速器配置、常用命令、数据卷、DockerFile、镜像推送阿里云等)
  18. hdu 1859 最小长方形
  19. STEP7主站与远程I/O组网_过路老熊_新浪博客
  20. sgu482 Impudent Thief (动态规划)

热门文章

  1. Java引用计数与实现
  2. 【Java小工匠聊密码学】--base58编码
  3. Python 连接Sql Server数据库 MSSql
  4. Magento中如何在模块中使用多张数据表并配置多个model?
  5. MySQL count(*)空表为何会很慢
  6. Android 让EditText不可编辑
  7. vim批量转文件编码
  8. Silverlight4 学习视频(四)
  9. git_修改git历史提交记录
  10. 我花了10个小时,写出了这篇K8S架构解析