zoukankan      html  css  js  c++  java
  • C# WinForm捕获全局异常

    根据网上的资料稍微修改了一下,原理很简单,代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    using System.Text;
    
    namespace WindowsFormsApplication2
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                GlobalExceptionCapture(() => 
                {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new Form1());
                });            
            }
    
            static void GlobalExceptionCapture(Action mainContent) 
            {
                try
                {
                    //设置应用程序处理异常方式:ThreadException处理
                    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                    //处理UI线程异常
                    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
                    //处理非UI线程异常
                    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    
                    #region 应用程序Main()内容包装的委托
                    mainContent();
                    #endregion
                }
                catch (Exception ex)
                {
                    string str = GetExceptionMsg(ex, string.Empty);
                    MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    
            static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
            {
                string str = GetExceptionMsg(e.Exception, e.ToString());
                MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                //Log.Write(str);
            }
    
            static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString());
                MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                //Log.Write(str);
            }
    
            /// <summary>
            /// 生成自定义异常消息
            /// </summary>
            /// <param name="ex">异常对象</param>
            /// <param name="backStr">备用异常消息:当ex为null时有效</param>
            /// <returns>异常字符串文本</returns>
            static string GetExceptionMsg(Exception ex, string backStr)
            {
                StringBuilder sbr = new StringBuilder();
                sbr.AppendLine("****************************异常文本****************************");
                sbr.AppendLine("【出现时间】:" + DateTime.Now.ToString());
                if (ex != null)
                {
                    sbr.AppendLine("【异常类型】:" + ex.GetType().Name);
                    sbr.AppendLine("【异常信息】:" + ex.Message);
                    sbr.AppendLine("【堆栈调用】:" + ex.StackTrace);
                    sbr.AppendLine("【异常对象】:" + ex.Source);
                    sbr.AppendLine("【触发方法】:" + ex.TargetSite);
                }
                else
                {
                    sbr.AppendLine("【未处理异常】:" + backStr);
                }
                sbr.AppendLine("***************************************************************");
                return sbr.ToString();
            }
        }  
    }
    
    
  • 相关阅读:
    DPDK安装方法 17.12.13
    numa.h:No such file or directory 解决方法
    17秋 软件工程 第六次作业 Beta冲刺 Scrum3
    17秋 软件工程 第六次作业 Beta冲刺 总结博客
    17秋 软件工程 第六次作业 Beta冲刺 Scrum2
    Paper Reviews and Presentations
    17秋 软件工程 第六次作业 Beta冲刺 Scrum1
    17秋 软件工程 第六次作业 Beta冲刺
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
    17秋 软件工程 个人作业 软件产品案例分析
  • 原文地址:https://www.cnblogs.com/timefiles/p/GlobalExceptionCapture.html
Copyright © 2011-2022 走看看