У меня есть приложение WPF, которое в случае необработанного исключения я хочу
- Выключить старое приложение немедленно .
- И перезапустите приложение
Для второй цели Я могу легко прослушать событие AppDomain.CurrentDomain.UnhandledException
и затем перезапустить то же приложение, используя Process.Start
.
Но, во-первых, я, что после возникновения исключения, приложение довольно долго зависает, прежде чем окончательно исчезнет.Я пытаюсь ускорить процесс, вставляя
Application.Current.Shutdown();
И все же, программа все еще занимает много времени, чтобы программа зависла и затем только окончательно закрылась.
Почему это так?дело?
А как я могу сразу закрыть старое приложение?Необработанное исключение в моем приложении уже достаточно плохое, мне не нужно, чтобы умирающее приложение задерживалось достаточно долго и смутило меня.
Вот минимальный пример кода, который воспроизводит проблему:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
DispatcherUnhandledException += CurrentApplicationOnDispatcherUnhandledException;
}
private void CurrentApplicationOnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
{
}
private void CurrentDomainOnUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Application.Current.Shutdown();
}
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button_Click(object sender, RoutedEventArgs e)
{
throw new NotFiniteNumberException();
}
}