C# 自动重新启动已崩溃的WPF应用程序
我需要在WPF崩溃时自动重新启动它。我现在尝试了一些方法,但我的应用程序仍然崩溃,没有捕捉到错误。 第二个问题是我不知道它为什么会崩溃。我不知道例外,VS没有告诉我。只是vshost32.exe已停止工作。我所知道的是,如果我在一个MediaElement中的一小段时间内加载了许多不同的文件,就会发生这种情况。可能是溢出异常或什么的 这是我的密码。它位于App.xaml中,并且已删除xaml中的StartupUriC# 自动重新启动已崩溃的WPF应用程序,c#,wpf,exception,xaml,exception-handling,C#,Wpf,Exception,Xaml,Exception Handling,我需要在WPF崩溃时自动重新启动它。我现在尝试了一些方法,但我的应用程序仍然崩溃,没有捕捉到错误。 第二个问题是我不知道它为什么会崩溃。我不知道例外,VS没有告诉我。只是vshost32.exe已停止工作。我所知道的是,如果我在一个MediaElement中的一小段时间内加载了许多不同的文件,就会发生这种情况。可能是溢出异常或什么的 这是我的密码。它位于App.xaml中,并且已删除xaml中的StartupUri private void Application_Startup(obj
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的错误日志中发现异常:
大致翻译如下:
Anwendung:newKnoblauch.exe Frameworkversion:v4.0.30319说明:由于未处理的异常,进程已停止。例外信息:例外代码c0000005,例外服装55542ECC
名称der fehlerhaften Anwendung:newKnoblauch.exe,版本:1.0.0.0,时间:0x4d62e0a6
模块名称:wmp.dll,版本:12.0.7600.16667,时间:0x4c7dd593
例外代码:0xc0000005
错误偏移量:0x00182ecc
ID des fehlerhaften Prozesses:0xa98我不确定是什么导致了此崩溃,但由于.Net 2,无法捕获StackOverflowException。参考: OutOfMemoryException也会导致不可预测的行为。
这些都是你无法真正计划的严重异常。修复导致它们的错误并继续前进: 我不确定是什么导致了这次崩溃,但是自从.Net 2以来,StackOverflowException无法被捕获。参考: OutOfMemoryException也会导致不可预测的行为。
这些都是你无法真正计划的严重异常。修复导致它们的错误并继续前进: 为了实现自动重启,您需要将原始可执行文件用作CLR主机,并将目标WPF应用程序加载到新的AppDomain中。当该AppDomain意外退出时,您可以重复该过程并在另一个新AppDomain中重新启动WPF应用程序。为了实现自动重新启动,您需要将原始可执行文件用作CLR主机,并在新AppDomain中加载目标WPF应用程序。当该AppDomain意外退出时,您可以重复此过程并在另一个新AppDomain中重新启动WPF应用程序。请查看此中的答案。对我来说根本不起作用。。即使抛出新的异常;它不会重新启动检查这里面的答案对我来说根本不起作用。。即使抛出新的异常;它没有重新启动,但发现了异常。检查第一篇文章,因为注释中的代码无法找到异常。检查第一篇文章,因为注释中的代码很糟糕