我目前正在编写我的第一个Windows窗体应用程序。我现在已经读了一些C#书籍,所以我对C#有哪些语言特性来处理异常有了相对较好的理解。但是,它们都是非常理论的,所以我还没有掌握如何在我的应用程序中将基本概念转换为良好的异常处理模型。
有没有人愿意分享一些关于这个主题的智慧珍珠?发布任何你见过的像我这样的新手犯下的常见错误,以及任何关于如何处理异常的一般性建议,以使我的应用程序更加稳定和健壮。
我目前正在尝试解决的主要问题是:
< code >F211
感谢您对我的忠告!
发布于 2008-10-08 16:33:12
再多一点..。
您绝对应该有一个集中的异常处理策略。这可以像在try/catch中包装Main()
一样简单,失败很快,并向用户显示一条优雅的错误消息。这是“最后的”异常处理程序。
如果可行,先发制人的检查总是正确的,但并非总是完美的。例如,在您检查文件是否存在的代码和您打开它的下一行之间,该文件可能已被删除或某些其他问题可能会阻碍您的访问。在那个世界里,你仍然需要try/catch/finally。根据需要使用抢占式检查和try/catch/finally。
永远不要“吞下”一个异常,除非在记录最充分的情况下,你绝对、肯定地确定抛出的异常是适合居住的。这种情况几乎永远不会发生。(如果是,请确保只接受特定的异常类--千万不要接受System.Exception
。)
在构建库(供应用程序使用)时,不要吞下异常,也不要害怕让异常冒泡出来。除非你有有用的东西要添加,否则不要重新抛出。永远不要(在C#中)执行以下操作:
throw ex;
因为您将擦除调用堆栈。如果必须重新抛出(这有时是必要的,例如在使用Enterprise Library的异常处理块时),请使用以下方法:
throw;
归根结底,运行中的应用程序抛出的绝大多数异常都应该在某个地方公开。它们不应该向最终用户公开(因为它们通常包含专有或其他有价值的数据),而应该通常记录下来,并将异常通知给管理员。为了简单起见,可以向用户呈现一个通用的对话框,可能带有一个参考号。
.NET中的异常处理与其说是科学,不如说是艺术。每个人都会在这里分享他们最喜欢的东西。这些只是我从第一天开始使用.NET时学到的一些技巧,这些技巧不止一次挽救了我的性命。您的里程可能会有所不同。
发布于 2008-10-08 16:30:46
有一个很棒的代码CodeProject article here。以下是几个亮点:
>H213
exception ();切勿在每个线程中只记录一次Exception.Message!
ignored
error不应为ignored
发布于 2009-04-24 20:08:33
请注意,Windows窗体有自己的异常处理机制。如果单击窗体中的某个按钮,并且该按钮的处理程序引发了处理程序中未捕获的异常,则Windows窗体将显示其自己的未处理异常对话框。
要防止显示未处理的异常对话框,并捕获此类异常以便记录和/或提供您自己的错误对话框,您可以在调用Application.ThreadException ()方法中的Application.Run()之前附加到Main事件。
https://stackoverflow.com/questions/183589
复制相似问题