Поймай все исключения WPF - PullRequest
       2

Поймай все исключения WPF

0 голосов
/ 25 сентября 2018

В моем 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 работает хорошо, потому что я вижу все ошибки и журнал INFO.

EDIT

После следования предложению Panagiotis Kanavos я обнаружил ошибку:

Приложение: xxx.exe

Версия du Framework: v4.0.30319

Описание:Процесс обработки и получения информации о состоянии дел в интернете1026 * Приложение: xxx.exe

Версия платформы: v4.0.30319

Описание: процесс был прерван из-за внутренней ошибки .NET Runtime по IP 547541C4 (54380000)с кодом выхода 80131506.

1 Ответ

0 голосов
/ 25 сентября 2018

Возможно, вы получили исключение, которое повредило состояние процесса?Из документации :

Начиная с .NET Framework 4, это событие не вызывается для исключений, которые портят состояние процесса, таких как переполнение стека или нарушения доступа,если обработчик событий не критичен к безопасности и не имеет атрибута HandleProcessCorruptedStateExceptionsAttribute .

Возможно, вы можете временно указать, что ваш обработчик критичен к безопасности, чтобы иметь возможность перехватывать исключение во время отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...