C#学习记录(2023.8.30)
捕获全局异常
处理UI线程(即主线程):
-
Application.ThreadException
事件处理非UI线程的:
AppDomain.CurrentDomain.UnhandleException
事件using System; using System.Threading; using System.Windows.Forms; namespace GlobalExceptionHandling { static class Program { [STAThread] static void Main() { // 注册全局异常处理事件 Application.ThreadException += ThreadExceptionHandler; AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler; // 单实例应用程序的互斥处理 if (!mutex.WaitOne(TimeSpan.Zero, true)) { MessageBox.Show("应用程序已在运行中!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } // UI 线程异常处理方法 static void ThreadExceptionHandler(object sender, ThreadExceptionEventArgs e) { Exception ex = e.Exception; MessageBox.Show("捕获到异常:" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); // 其他异常处理逻辑 } // 非 UI 线程异常处理方法 static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) { Exception ex = e.ExceptionObject as Exception; MessageBox.Show("全局异常处理:" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); // 其他异常处理逻辑 } } }a