首页 > 解决方案 > WPF - 在 Main 中捕获异常

问题描述

在项目WPF中;我发现如果在 中引发异常Main,它不会被捕获,因为new App在引发之后执行exception。如果exception之后出现new App,它可以被抓住。

我想知道我必须重新捕捉它,Main或者有另一种方法可以捕捉它可用的方法。

应用程序.xaml

public partial class App : Application
{
    public App()
    {
        SetupExceptionHandling();
    }

    private void SetupExceptionHandling()
    {
        AppDomain.CurrentDomain.UnhandledException += (s, e) =>
        {
            //log
        };

        this.DispatcherUnhandledException += (s, e) =>
        {
            //log
        };

        TaskScheduler.UnobservedTaskException += (s, e) =>
        {
            //log
        };
    }

    [STAThread]
    public static void Main()
    {
        try
        {
            throw new Exception();
            var app = new App();
        }catch(Exception ex)
        {
            //log
        }
    }
}

标签: c#wpfexception-handling

解决方案


创建2个方法:

一个用于Main,另一个用于App

看起来很丑,但我想不出更好的方法。

public partial class App : Application
{
    public App()
    {
        SetupExceptionHandlingInApp();
    }

    private static void SetupExceptionHandlingInMain()
    {
        AppDomain.CurrentDomain.UnhandledException += (s, e) =>
        {
            //log
        };

        TaskScheduler.UnobservedTaskException += (s, e) =>
        {
            //log
        };
    }

    private void SetupExceptionHandlingInApp()
    {            
        this.DispatcherUnhandledException += (s, e) =>
        {
            //log
        };                      

    }

    [STAThread]
    public static void Main()
    {
        SetupExceptionHandlingInMain();
        var app = new App();
        throw new Exception();
    }

推荐阅读