簡體   English   中英

為什么我的 Catch 塊僅在 Visual Studio 中調試時運行?

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

Program.cs 中的代碼

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

    try
    {
        Application.Run(new Form1());
    }
    catch (Exception ex)
    {
        MessageBox.Show("Blah...");
    }
}

在 Form1 中,我有一個帶有代碼throw new Exception("");的按鈕。 .

如果我從 Visual Studio 運行應用程序,則會彈出我的消息框(帶有消息“Blah ...”)。 但是如果我從可執行文件運行應用程序,那么 catch 塊根本不會執行。

為什么有區別?

我正在使用 Visual Studio 2010、.NET 4.0、Windows XP。

這是因為 Windows Forms 應用程序的標准異常處理在附加 Visual Studio 調試器時表現不同 - 通常, Application.Run方法中內置的異常處理程序會捕獲未處理的異常,以便它可以執行類似顯示以下對話框的操作:

錯誤對話框

如果它允許在Application.Run方法之外引發異常,那么如果用戶按下“繼續”,它將阻止應用程序繼續(因為捕獲位於消息泵之外)。

然而,在調試時,它被禁用,大概是為了調試器將在未處理的異常上直接跳轉到調試模式,而不是顯示上述對話框。

如果您希望在 Windows Forms 應用程序中處理未處理的異常,那么您應該處理Application.ThreadException事件 或者,您可以使用Application.SetUnhandledExceptionMode方法更改此行為。

對此感到困惑的絕不是您一個人:

因為在RELEASE模式下,消息框必須顯示你的應用程序將“死”,你不能通過顯示 MessageBox 來阻止它。 調試模式下,VS 關心這一點,並在引發異常的行中斷

問候。

我不明白為什么會發生這種情況,但嘗試重建解決方案,如果有疑問我總是這樣做。 它可能會或可能不會解決問題,您可能已經嘗試過,但如果您還沒有嘗試過,它可能會為您解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM