Why is my Catch block only running while Debugging in Visual Studio?

后端 未结 3 1473
长情又很酷
长情又很酷 2020-12-20 15:38

Code in Program.cs

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    try
         


        
3条回答
  •  星月不相逢
    2020-12-20 16:13

    This is because the standard exception handling for a Windows Forms application behaves differently when the Visual Studio debugger is attached - normally the exception handler built into the Application.Run method catches unhandled exceptions so that it can do things like show the following dialog:

    Error dialog

    If it allowed the exception to be thrown outside of the Application.Run method then it would prevent the application from continuing if the user presses "continue" (as the catch is outside of the message pump).

    When debugging however this is disabled, presumably so that the debugger will jump straight into debugging mode on an unhandled exception rather than the above dialog being shown.

    If you wish to handle unhandled exceptions in your Windows Forms application then you should handle the Application.ThreadException Event. Alternatively you can alter this behaviour with the Application.SetUnhandledExceptionMode Method.

    You are by no means alone in being confused by this:

    • Is try/catch around whole C# program possible?
    • Exception handling problem in release mode (this question is misleadingly named - this isn't related to the Release / Debug build setting)
    • C# Exceptions only caught when debugging?

提交回复
热议问题