【问题标题】:Catch all exceptions WPF捕获所有异常 WPF
【发布时间】:2018-09-25 13:31:09
【问题描述】:

在我的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

描述:le processus a été arrêté en raison d'une erreur interne dans le runtime .NET à l'adresse IP 547541C4 (54380000) avec le code de sortie 80131506。

翻译

应用程序:xxx.exe

框架版本:v4.0.30319

描述:进程因内部错误而终止 IP 547541C4 (54380000) 的 .NET 运行时,退出代码为 80131506。

【问题讨论】:

  • 它是如何以及从哪里崩溃的?
  • @mm8 :应用程序在执行时在某处崩溃,因为存在未捕获的异常,问题中的代码用于捕获异常。它运作良好,但有时会出现他们无法捕获的异常。这意味着
  • @ThierryV 如果发生未处理的异常,则会在事件日志中写入应用程序崩溃错误。你检查过事件查看器吗?
  • 您为什么认为System.Windows.Forms.Application.ThreadExceptionWPF 应用程序完全有用? WinForms DLL 中而不是 WPF 中存在这种情况是有原因的
  • @CamiloTerevinto 希望我不会错过任何异常,我尝试使用它但我无法捕获异常

标签: c# wpf logging


【解决方案1】:

也许您遇到了破坏进程状态的异常?来自documentation

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

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

【讨论】:

    猜你喜欢
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多