我需要在崩溃时自动重启我的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
答案 0 :(得分:3)
我不确定你正在做什么导致这次崩溃,但是因为.Net 2,无法捕获StackOverflowException。参考:C# catch a stack overflow exception
OutOfMemoryException也会导致不可预测的行为。 这些是您无法真正计划的严重例外情况。修复导致它们的错误并继续前进。 :)
答案 1 :(得分:2)
为了实现自动重启,您可能希望将原始可执行文件充当CLR主机,并在新的AppDomain中加载目标WPF应用程序。当该AppDomain意外退出时,您可以重复该过程并在另一个新的AppDomain中重新启动WPF应用程序。