繁体   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