Autorestart崩溃了WPF应用程序

时间:2011-02-21 21:58:46

标签: c# wpf exception xaml exception-handling

我需要在崩溃时自动重启我的WPF。我现在尝试了一些东西,但我的应用程序仍然崩溃,并没有发现错误。 第二个问题是我不知道它崩溃的原因。好吧,我不知道异常,VS不告诉我。只是vshost32.exe已停止工作。我所知道的是,如果我在MediaElement中在很短的时间内加载了很多不同的文件,就会发生这种情况。 (也许溢出异常或其他)

这是我的代码。它位于App.xaml中,并且XAML中的“StartupUri”已删除。

    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的错误日志中找到了异常: 大致翻译就是这样:

Anwendung:newKnoblauch.exe Frameworkversion:v4.0.30319描述:由于未处理的异常,进程已停止。 Exceptioninfo:Exceptioncode c0000005,Exceptionadresse 55542ECC

Name der fehlerhaften Anwendung:newKnoblauch.exe,版本:1.0.0.0,时间:0x4d62e0a6 名称des fehlerhaften Moduls:wmp.dll,版本:12.0.7600.16667,时间:0x4c7dd593 例外代码:0xc0000005 错误偏移:0x00182ecc ID des fehlerhaften Prozesses:0xa98

2 个答案:

答案 0 :(得分:3)

我不确定你正在做什么导致这次崩溃,但是因为.Net 2,无法捕获StackOverflowException。参考:C# catch a stack overflow exception

OutOfMemoryException也会导致不可预测的行为。 这些是您无法真正计划的严重例外情况。修复导致它们的错误并继续前进。 :)

答案 1 :(得分:2)

为了实现自动重启,您可能希望将原始可执行文件充当CLR主机,并在新的AppDomain中加载目标WPF应用程序。当该AppDomain意外退出时,您可以重复该过程并在另一个新的AppDomain中重新启动WPF应用程序。