[英]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.