【C#】WinForm 全局異常捕獲
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
/// <summary> /// 應(yīng)用程序的主入口點。 /// </summary> [STAThread] static void Main() { try { //設(shè)置應(yīng)用程序處理異常方式:ThreadException處理 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) { string str = ExceptionToString(ex, "主線程"); MessageBox.Show(str, "系統(tǒng)錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// <summary> /// 提取異常信息 /// </summary> private static string ExceptionToString(Exception ex, string info) { StringBuilder str = new StringBuilder($"{DateTime.Now}, {info}發(fā)生了一個錯誤!{Environment.NewLine}"); if (ex.InnerException == null) { str.Append($"【對象名稱】:{ex.Source}{Environment.NewLine}"); str.Append($"【異常類型】:{ex.GetType().Name}{Environment.NewLine}"); str.Append($"【詳細信息】:{ex.Message}{Environment.NewLine}"); str.Append($"【堆棧調(diào)用】:{ex.StackTrace}"); } else { str.Append($"【對象名稱】:{ex.InnerException.Source}{Environment.NewLine}"); str.Append($"【異常類型】:{ex.InnerException.GetType().Name}{Environment.NewLine}"); str.Append($"【詳細信息】:{ex.InnerException.Message}{Environment.NewLine}"); str.Append($"【堆棧調(diào)用】:{ex.InnerException.StackTrace}"); } return str.ToString(); } /// <summary> /// UI線程未捕獲異常處理函數(shù) /// </summary> private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e) { try { string msg = ExceptionToString(e.Exception, "UI線程"); MessageBox.Show(msg, "系統(tǒng)錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (Exception ex) { string msg = ExceptionToString(ex, "UI線程 處理函數(shù)"); MessageBox.Show(msg, "系統(tǒng)錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error); } } /// <summary> /// 非UI線程未捕獲異常處理函數(shù) /// </summary> private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { try { string msg; if (e.ExceptionObject is Exception ex) { msg = ExceptionToString(ex, "非UI線程"); } else { msg = $"發(fā)生了一個錯誤!信息:{e.ExceptionObject}"; } MessageBox.Show(msg, "系統(tǒng)錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (Exception ex) { string msg = ExceptionToString(ex, "非UI線程 處理函數(shù)"); MessageBox.Show(msg, "系統(tǒng)錯誤", MessageBoxButtons.OK, MessageBoxIcon.Error); } } <configuration> <runtime> <legacyUnhandledExceptionPolicy enabled="1"/> </runtime> </configuration> 該文章在 2023/9/4 12:05:16 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |