捕获所有异常WPF

时间:2018-09-25 13:31:09

标签: c# wpf logging

在我的App.xaml.cs中,我具有这些代码来捕获异常并将其记录

public App()
{
     SetupExceptionHandlingInApp();
     // other codes
}

private void SetupExceptionHandlingInApp()
{
     this.DispatcherUnhandledException += (s, e) =>
     {
        e.Handled = true;
        //LOGGING CODE HERE
        this.Shutdown(-1);
     };
}

[STAThread]
public static void Main()
{
   SetupExceptionHandlingInMain();
   //other codes
}

private static void SetupExceptionHandlingInMain()
{   
    AppDomain.CurrentDomain.UnhandledException += (s, e) =>
    {
        //LOGGING CODE HERE                 
        Environment.Exit(1);
    };           

    System.Windows.Forms.Application.ThreadException += (s, e) =>
    {
        //LOGGING CODE HERE
        Environment.Exit(1);
    };

    TaskScheduler.UnobservedTaskException += (s, e) =>
    {
        //LOGGING CODE HERE
    };
}

在大多数情况下,我可以捕获异常并将其记录下来。但是应用程序有时在执行时崩溃,而且我找不到导致崩溃的异常的记录错误。

除了上述方法之外,我是否还缺少其他方法来捕获异常?我看了一些有关SO的文章,但几乎他们在上面使用了这些方法。

log4net可以正常工作,因为我可以看到所有的ERROR和INFO日志。

编辑

按照Panagiotis Kanavos的建议,我发现了错误:

应用程序:xxx.exe

框架版本:v4.0.30319

说明:运行时.NET的IP地址为547541C4(54380000)的编码为80131506的处理程序。

翻译

应用程序:xxx.exe

框架版本:v4.0.30319

  

描述:由于内部错误导致进程终止   IP地址为547541C4(54380000)的.NET运行时,退出代码为80131506。

1 个答案:

答案 0 :(得分:0)

也许您有一个异常破坏了进程的状态?来自documentation

  

从.NET Framework 4开始,不会为以下事件引发此事件   破坏进程状态的异常,例如堆栈   溢出或访问冲突,除非事件处理程序是   安全至上并具有   HandleProcessCorruptedStateExceptionsAttribute属性。

也许您可以临时指定您的处理程序对安全性至关重要,以便能够在调试期间捕获异常。