首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局异常捕获只在调试WinForms应用程序时起作用。

全局异常捕获只在调试WinForms应用程序时起作用。
EN

Stack Overflow用户
提问于 2013-10-21 01:01:06
回答 1查看 463关注 0票数 2

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

代码语言:javascript
复制
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);
        }
    }
}

然后在代码中引发一个异常(就像这次一样--完全是由于我的健忘):

代码语言:javascript
复制
public partial class MyPage : UserControl
{

    void func1()
    {
        SqlConnectionStringBuilder conStr = null;

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

现在,如果我正在调试我的项目,我会从全局异常处理程序中看到我的Global Exception消息框。

但是,如果我没有调试我的项目并以Ctrl+F5的形式运行它,或者如果我构建了一个发布项目,我将得到以下窗口,而不是我上面编码的窗口:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-21 01:06:48

您应该挂起像AppDomain.UnhandledException这样的事件。

这些事件是在发布模式中看到的全局错误处理程序之前引发的。这允许您在救援前记录错误。以更好的方式。

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

我必须指出,你看到的错误是一个NullReferenceException..理想情况下,在您的代码中可以很好地处理。不过,将这些事件挂钩并记录异常仍然是个好主意。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19484774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档