WPF全局异常处理

private void RegisterEvents()
{
    //Task线程内未捕获异常处理事件
    TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;//Task异常 
    //UI线程未捕获异常处理事件(UI主线程)
    DispatcherUnhandledException += App_DispatcherUnhandledException;
    //非UI线程未捕获异常处理事件(例如自己创建的一个子线程)
    AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
}
//Task线程内未捕获异常处理事件
private void TaskScheduler_UnobservedTaskException(object? sender, UnobservedTaskExceptionEventArgs e)
{
    try
    {
        Exception? exception = e.Exception as Exception;
        if (exception != null)
        {
            this.Logger.Error(exception);
        }
    }
    catch (Exception ex)
    {
        this.Logger.Error(ex);
    }
    finally
    {
        e.SetObserved();
    }
}
//非UI线程未捕获异常处理事件(例如自己创建的一个子线程)      
private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
    try
    {
        var exception = e.ExceptionObject as Exception;
        if (exception != null)
        {
            this.Logger.Error(exception);
        }
    }
    catch (Exception ex)
    {
        this.Logger.Error(ex);
    }
    finally
    {
        //ignore
    }
}
//UI线程未捕获异常处理事件(UI主线程)
private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
    try
    {
        this.Logger.Error(e.Exception);
    }
    catch (Exception ex)
    {
        this.Logger.Error(ex);
    }
    finally
    {
        e.Handled = true;
    }
}
posted @   Alex枫  阅读(421)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示