问题
I have a problem in a WPF application. I wrote this code:
public partial class App : Application
{
public App()
{
AppDomain.CurrentDomain.UnhandledException += new
UnhandledExceptionEventHandler(MyHandler);
}
void MyHandler(object sender, UnhandledExceptionEventArgs e)
{
Exception exception = e.ExceptionObject as Exception;
MessageBox.Show(exception.Message, "ERROR",
MessageBoxButton.OK, MessageBoxImage.Error);
}
...
}
but when a unhandled exception happens, a lot of MessageBox appear to the screen (the exception happens in a timed routine) and after closing one of them, Windows signals that there is an unhandled exception.
How can I avoid multiple MessageBoxes?
How can I avoid the message of an unhandled exception?
How can I terminate the application after the exception?
As you can easily suppose, I would like to show a message (but only one) with my MessageBox and then terminate the application without any other message.
In a previous question related to this argument, Kyle Rozendo told me to use DispatcherUnhandledException. Is it necessary or the code I written is sufficient?
Thank you.
回答1:
You can avoid multiple messageboxes by initializing a static boolean firstTime
to true
and use the code within the Exception handler:
void MyHandler(object sender, UnhandledExceptionEventArgs e) { if (firstTime){ Exception exception = e.ExceptionObject as Exception; MessageBox.Show(exception.Message, "ERROR", MessageBoxButton.OK, MessageBoxImage.Error); firstTime = false; }else{ // Now kill the process.... } }
To terminate the process do this, within the MyHandler
:
System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess(); proc.Kill();
回答2:
You can also use Application.Exit()
or System.Environment.Exit(exitCode)
to immediately shut down your application after you have shown your error dialog box.
来源:https://stackoverflow.com/questions/2266291/terminate-application-after-unhandled-exception