C#windows应用程序中的全局级错误处理

时间:2013-12-02 09:37:35

标签: c# winforms exception exception-handling

我正在尝试在我的Windows应用程序中实现全局级错误处理

我有表单的按钮点击事件,这会产生一些错误

  label1.Text =
            class1.Calculate(Convert.ToSingle(textBox1.Text), Convert.ToSingle(textBox2.Text))
                  .ToString(CultureInfo.InvariantCulture);

        MessageBox.Show("That was really Close");

现在我希望控件转到消息框,未处理的错误正在主函数中处理

private static void Main()
    {

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
        Application.Run(new Form1());
    }
    private static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
    {
        if (e.Exception.InnerException != null)
            MessageBox.Show(e.Exception.InnerException.Message.ToString());
        else MessageBox.Show(e.Exception.ToString());
    } 

此代码示例确实处理异常但我希望控件返回按钮Click,即MessageBox.Show("那真是关闭");应该在异常处理后调用

1 个答案:

答案 0 :(得分:2)

如果您不希望该方法停止异常,那么您需要在此时处理异常。你可以让catch调用某种全局错误处理方法,但是你需要在该方法中使用try catch。

全局级异常处理适用于您无法立即处理并且需要在程序死亡之前捕获的异常,通常用于记录等。

全局级异常处理不能替代在正确位置处理异常。如果你希望代码抛出异常并且它是你可以处理的异常,那么你应该在代码的那一点放置一个try / catch。在上面的示例中,您说您希望继续运行该方法,因此错误不是致命错误,因此您应该以正常方式处理它。

通常应该注意的是,您可以处理的异常是可以避免的异常。例如,在传递方法之前检查传递给方法的内容。那些无法完全删除的通常是与外部资源有关的(例如,阅读文件)。我确信还有很多其他的例外情况,但正如有人明智地曾说过“例外情况属于特殊情况”。如果你能预见到它们,你应该尽量避免它们。

在这种情况下,我假设异常与文本框中的无效输入有关。在这种情况下,您应该使用Single.TryParse验证输入,然后再将其传递给您的方法。如果其中任何一个值无法解析,则可以让用户正确地知道。