Авторестарт, сбой приложения WPF - PullRequest
1 голос
/ 22 февраля 2011

Мне нужно автоматически перезапустить мой WPF, когда он падает. Я попробовал несколько вещей сейчас, но мое приложение все еще падает и не улавливает ошибку. Вторая проблема - я не знаю, почему он падает. Ну, я не знаю исключения, VS не говорит мне. Просто vshost32.exe перестал работать. Все, что я знаю, это то, что происходит, если я загружаю много разных файлов за небольшое количество времени в MediaElement. (Может быть, переполнение исключения или что-то)

Это мой код. Это в App.xaml и удалено с "StartupUri" в XAML.

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        AppDomain currentDomain = AppDomain.CurrentDomain;
        currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);

        try
        {
            MainWindow m = new MainWindow();
            m.Show();
        }
        catch (Exception)
        {
            MessageBox.Show("test");
        }
    }

    static void MyHandler(object sender, UnhandledExceptionEventArgs args)
    {
        Exception e = (Exception)args.ExceptionObject;
        MessageBox.Show("MyHandler caught : " + e.Message);
    }

    private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
    {
        MessageBox.Show("test");
    }

EDIT // Обнаружено исключение в журнале ошибок Windows: грубо говоря это так:

Ответ: newKnoblauch.exe Frameworkversion: v4.0.30319 Описание: Процесс остановлен из-за необработанного исключения. Exceptioninfo: код исключения c0000005, адрес исключения 55542ECC

Name der fehlerhaften Anwendung: newKnoblauch.exe, версия: 1.0.0.0, время: 0x4d62e0a6 Имя модуля fehlerhaften: wmp.dll, версия: 12.0.7600.16667, время: 0x4c7dd593 Код исключения: 0xc0000005 Смещение ошибки: 0x00182ecc ID des fehlerhaften Prosesses: 0xa98

Ответы [ 2 ]

3 голосов
/ 22 февраля 2011

Я не уверен, что вы делаете, чтобы вызвать этот сбой, но начиная с .Net 2, StackOverflowException не может быть перехвачен.Ссылка: C # перехватывает исключение переполнения стека

Исключение OutOfMemoryException также может вызвать непредсказуемое поведение.Это те серьезные исключения, которые вы не можете планировать.Исправьте ошибки, которые их вызывают, и двигайтесь дальше.:)

2 голосов
/ 22 февраля 2011

Чтобы реализовать автоматический перезапуск, вы бы хотели, чтобы исходный исполняемый файл выступал в качестве хоста CLR, и загружал целевое приложение WPF в новый домен приложения.Когда этот AppDomain неожиданно завершает работу, вы можете повторить процесс и перезапустить приложение WPF в другом новом AppDomain.

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