2

catch我在我的 WinForms 应用程序中实现了以下全局异常:

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 项目,我会得到以下窗口,而不是我上面编写的窗口:

在此处输入图像描述

知道如何让我的全局异常处理程序代替处理吗?

4

1 回答 1

1

您应该挂钩一个事件,例如AppDomain.UnhandledException

这些事件在您在发布模式下看到的全局错误处理程序之前引发。这使您可以在退出之前记录错误……以更好的方式。

还引发了其他事件。例如,Application.ThreadException。阅读文档将使您更好地了解您的特定需求。

我必须注意,您看到的错误是NullReferenceException.. 理想情况下,它会在您的代码中得到很好的处理。尽管如此,挂钩这些事件并记录异常是一个好主意。

于 2013-10-21T01:06:48.713 回答