c# - 自动重启崩溃的 WPF 应用程序

标签 c# wpf xaml exception

我需要在 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");
    }

编辑// 在windows的errorlog中发现异常: 大致翻译是这样的:

答案:newKnoblauch.exe Frameworkversion:v4.0.30319 描述:由于未处理的异常,进程已停止。异常信息:异常代码 c0000005,异常地址 55542ECC

Fehlerhaften Anwendung 的名称:newKnoblauch.exe,版本:1.0.0.0,时间:0x4d62e0a6 名称 des fehlerhaften 模块:wmp.dll,版本:12.0.7600.16667,时间:0x4c7dd593 异常代码:0xc0000005 错误偏移:0x00182ecc ID des fehlerhaften Prozesses: 0xa98

最佳答案

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

关于c# - 自动重启崩溃的 WPF 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071746/

相关文章:

C# 作为第一门语言?

c# - 如何测试 try-catch?

c# - 收集拥有对象时如何终止工作线程?

wpf - 如何在 XAML 中将颜色转换为画笔?

c# - 为什么 DrawString 看起来很糟糕?

c# - WPF 绑定(bind),其中值 = X

c# - 当 UserControl 具有 DataContext 时,UserControl 的 DependencyProperty 为 null

c# - 在透明 WPF 窗口后面模糊

wpf - 创建一个具有水平拉伸(stretch)的三个相等列的网格

c# - Xaml 绑定(bind)不适用于 Application.Current