From 8eca0a728bed01b5b3e161f2f322da24149a418a Mon Sep 17 00:00:00 2001 From: jie65535 Date: Fri, 13 May 2022 11:41:09 +0800 Subject: [PATCH] Add global exception handling --- Source/GrasscutterTools/Program.cs | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/Source/GrasscutterTools/Program.cs b/Source/GrasscutterTools/Program.cs index eef00ce..adc230c 100644 --- a/Source/GrasscutterTools/Program.cs +++ b/Source/GrasscutterTools/Program.cs @@ -1,6 +1,10 @@ using System; +using System.Text; +using System.Threading; using System.Windows.Forms; +using GrasscutterTools.Properties; + namespace GrasscutterTools { internal static class Program @@ -11,9 +15,59 @@ namespace GrasscutterTools [STAThread] private static void Main() { + //设置应用程序处理异常方式:ThreadException处理 + Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException); + //处理线程异常 + Application.ThreadException += Application_ThreadException; + //处理非UI线程异常 + AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FormMain()); } + + #region - 全局异常处理 - + + private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) + { + string str = GetExceptionMsg(e.Exception, e.ToString()); + MessageBox.Show(str, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) + { + string str = GetExceptionMsg(e.ExceptionObject as Exception, e.ToString()); + MessageBox.Show(str, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + /// + /// 生成自定义异常消息 + /// + /// 异常对象 + /// 备用异常消息:当ex为null时有效 + /// 异常字符串文本 + private static string GetExceptionMsg(Exception ex, string backStr) + { + StringBuilder sb = new StringBuilder(); + sb.AppendLine("****************************异常文本****************************"); + sb.AppendLine("【出现时间】:" + DateTime.Now.ToString()); + if (ex != null) + { + sb.AppendLine("【异常类型】:" + ex.GetType().Name); + sb.AppendLine("【异常信息】:" + ex.Message); +#if DEBUG + sb.AppendLine("【堆栈调用】:" + ex.StackTrace); +#endif + } + else + { + sb.AppendLine("【未处理异常】:" + backStr); + } + sb.AppendLine("***************************************************************"); + return sb.ToString(); + } + + #endregion - 全局异常处理 - } } \ No newline at end of file