Winform 全局异常捕获

Posted andorxor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Winform 全局异常捕获相关的知识,希望对你有一定的参考价值。

初学 Winform 时,相信很多人都遇到过自己的程序在运行中出现了没有捕获的异常,导致程序退出的问题,在这种情况下,程序往往会弹出一个很不友好的信息框,然后强行退出。

程序出现了未捕获的异常,系统便认为它无法再继续工作了,所以强行结束了程序,这也是很正常的行为。但如果我们想要给用户显示一个比较友好的信息框,或者记录上传错误日志等等,那么就需要添加全局异常处理程序。

要为 Winform 程序添加全局异常处理程序,需要对 UI 线程和其他线程分别处理,代码如下:

static class Program
{
    /// 
    /// 应用程序的主入口点。
    /// 
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        // 设置 UI 线程异常处理程序,必须在 Application.Run() 方法之前添加
        Application.ThreadException += OnThreadException;
        // 要捕获其他线程的异常,必须先调用 SetUnhandledExceptionMode() 方法指示程序如何处理异常
        Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
        // 设置其他线程异常处理程序,需要注意的是,此异常处理程序并不能阻止应用被终止
        AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
        Application.Run(new MainForm());
    }
    private static void OnThreadException(object sender, ThreadExceptionEventArgs e)
    {
        // UI 线程异常处理,根据需要可以选择退出或不退出应用
        // ShowError((e.ExceptionObject as Exception).Message);
    }
    private static void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        // 其他线程异常处理,此方法结束后应用会被强制退出
        // ShowError(e.Exception.Message);
    }
}

 

以上是关于Winform 全局异常捕获的主要内容,如果未能解决你的问题,请参考以下文章

winform 记录全局异常捕获

Android 捕获全局异常CrashHandler,防止异常闪退,记录异常日志

转 C#WinForm程序异常退出的捕获继续执行与自动重启

WPF捕获全局未处理异常

WPF全局异常捕获

异常和TCP通讯