WPF-在Main中捕获异常

时间:2018-08-03 15:40:11

标签: c# wpf exception-handling

在项目WPF中;我发现,如果在Main中引发异常,则不会捕获该异常,因为在引发new App之后执行了exception。如果exceptionnew App之后,则可能被捕获。

我想知道我必须在Main中重新捕获它,还是有另一种方法可以捕获可用的方法。

App.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
        }
    }
}

1 个答案:

答案 0 :(得分:-1)

创建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();
    }