Catching exception in Main() method

Posted by Corvin on Stack Overflow See other posts from Stack Overflow or by Corvin
Published on 2010-04-27T11:27:44Z Indexed on 2010/04/27 11:43 UTC
Read the original article Hit count: 219

Filed under:
|
|
|
|

Consider the following simple application: a windows form created by a "new C# windows application" sequence in VS that was modified in a following way:

public static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    try
    {
        Application.Run(new Form1());
    }
    catch (Exception ex)
    {
        MessageBox.Show("An unexpected exception was caught.");
    }

}

Form1.cs contains the following modifications:

private void Form1_Load(object sender, EventArgs e)
{
    throw new Exception("Error");

}

If I press F5 in IDE, then, as I expect, I see a message box saying that exception was caught and the application quits.

If I go to Debug(or Release)/bin and launch the executable, I see the standard "Unhandled exception" window, meaning that my exception handler doesn't work.

Obviously, that has something to do with exception being thrown from a different thread that Application.Run is called from. But the question remains - why the behavior differs depending on whether the application has been run from IDE or from command line? What is the best practice to ensure that no exceptions remain unhandled in the application?

© Stack Overflow or respective owner

Related posts about Windows

Related posts about winforms