簡體   English   中英

全局異常捕獲僅在調試WinForms應用程序時有效

[英]Global exception catch works only while debugging the WinForms application

我在WinForms應用程序中實現了以下全局異常catch

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        try
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MyMainForm());
        }
        catch (Exception ex)
        {
            MessageBox.Show("UNHANDLED EXCEPTION: The program will be terminated. Details follow:\n\n" +
                getExceptionInfoWithDebuggerOutput(ex),
                "Global Exception",
                MessageBoxButtons.OK,
                MessageBoxIcon.Error);
        }
    }
}

然后在代碼下,引發一個異常(之所以這樣-完全是由於我的健忘):

public partial class MyPage : UserControl
{

    void func1()
    {
        SqlConnectionStringBuilder conStr = null;

        //... later
        conStr.DataSource = strServer;  //<<--- Where exception is raised
    }
}

現在,如果要調試項目,則可以從全局異常處理程序中看到“ Global Exception消息框。

但是,如果我不調試我的項目並以Ctrl + F5的形式運行它,或者如果我構建一個Release項目,則將得到以下窗口,而不是上面編碼的窗口:

在此處輸入圖片說明

任何想法如何使我的全局異常處理程序代替處理?

您應該掛接諸如AppDomain.UnhandledException之類的事件。

這些事件在您在發布模式下看到的全局錯誤處理程序之前引發。 這使您可以在以更好的方式解決之前記錄錯誤。

還引發了其他事件。 例如, Application.ThreadException 閱讀文檔可以使您更好地了解自己的特定需求。

我必須注意,您看到的錯誤是NullReferenceException ..最好在您的代碼中很好地處理。 盡管如此,掛接這些事件並記錄異常是一個好主意。

暫無
暫無

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

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