tags:

views:

224

answers:

2

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.

A: 

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();

Hope this helps, Best regards, Tom.

tommieb75
What about DispatcherUnhandledException? Is it necessary too?
Maurizio Reginelli
DispatcherUnhandledException is not necessary. Have you tried the code to see if that worked..because the code will shutdown the application...
tommieb75
A: 

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.

Nick
Minor note.. Application.Exit() will not work if the exception happens before Application.Run
LeeHull