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();             }         }     } }

时间: 2024-11-09 01:31:24

C#捕获全局异常的相关文章

Android应用捕获全局异常自定义处理

[2016-06-30]最新的全局异常处理DRCrashHandler已经集成在DR_support_lib库中 具体请看: https://coding.net/u/wrcold520/p/DR_support_lib/git/tree/master [2016-06-28] 1 增加log4j的支持[2016-06-28] 2 增加全局异常处理(可自定义程序崩溃提示消息,自定义发送错误报告到服务器)[2016-06-28] 3 增加两种应用退出方法:① appExit,结束掉所有Acitiv

Android应用源码之捕获全局异常

Android应用源码之捕获全局异常 本项目就是一个简单的全局异常捕捉例子,捕捉到异常以后可以把异常信息写入文件以供后来分析或者用友好的方式进行提示后再退出程序. 下载地址:http://www.devstore.cn/code/info/630.html

WebForm 在 Global.asax 中捕获全局异常

1 /// <summary> 2 /// 捕获全局异常 3 /// </summary> 4 /// <param name="sender">sender</param> 5 /// <param name="e">e</param> 6 protected void Application_Error(Object sender, EventArgs e) 7 { 8 Exception

Android -- 使用UncaughtExceptionHandler捕获全局异常

在集成了统计SDK(友盟统计,百度统计等)之后,有一个非常有利于测试的功能:错误分析!此功能能够将程序在运行中碰到的崩溃(runtimeException)问题反馈到服务器,帮助开发者改善产品,多适配机器. 然而在公司android开发中不集成这些SDK,那应该怎么实现这样的功能呢?下面让我们来看下如何使用UncaughtExceptionHandler来捕获异常. 首先实现创建一个类,实现UncaughtExceptionHandler接口.代码如下: public class CrashHa

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

毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里.所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命.下面我们主要讨论的是如何捕捉全局的异常.基本上在winform或web中捕获全局异常的思路都是一样的,在全局的应用程序对象中添加异常捕获的代码,并写入日志文件中. 一.在Winform程序中捕获全局异常 在winfrom中我们需要了解Application对象中的两个事件 ①Application.ThreadExcep

捕获全局异常UncaughtExceptionHandler

标签:捕获全局异常,UncaughtExceptionHandler ========================网上相关博客======================== 参考:http://blog.csdn.net/jdsjlzx/article/details/7606423 Android自定义捕获Application全局异常 http://git.oschina.net/oschina/android-app 大家可以参考. 大家都知道,现在安装Android系统的手机版本和

springboot捕获全局异常和配置多数据源

目录 配置多数据源 写两个数据源的配置类. @(springboot捕获全局异常和配置多数据源) 捕获全局异常是在项目运行期间如果调用的某一个方法出现了运行时异常,则会捕获,并且给出回馈. 首先需要建一个包,包里新建一个捕获异常类GlobalExceptionHandler.前提是springboot的启动类的扫描注解ComponentScan()要扫描到. /** * 用于捕获全局异常 */ @ControllerAdvice//控制器切面 public class GlobalExcepti

Android使用UncaughtExceptionHandler捕获全局异常

参考资料: http://blog.csdn.net/hehe9737/article/details/7662123 http://www.apkbus.com/android-128270-1-1.html http://www.cnblogs.com/freeliver54/archive/2011/10/17/2215423.html Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {//

winform程序捕获全局异常,对错误信息写入日志并弹窗

使用场景:在winform程序中如果没对方法进行try catch操作,若方法内出错,则整个程序报错并退出,如下图 如果程序已在客户手中,若没对错误的详细信息进行拍照,我们则不知道错误原因是什么.我们需要能捕获整个程序的错误信息,一旦程序出错,则跳到我们指定的方法中,执行错误信息的报错以及友好的错误提示(也可以不提示,直接退出程序). 实现代码如下:(代码放置位置:在Program.cs文件中的Main方法中) using System; using System.Collections.Gen