2008-11-13 65 views
2

我构建了一个UserControl,我不知道如何处理异常,控件本身不是很复杂,用户从磁盘选择了一个映像,以便他们可以授权它,不知道控件如何使用,所以如果我使用MessageBox,我可能会阻止应用程序,如果我只是重新扔它,我可能会崩溃。在UserControl中处理异常的正确方法

在此先感谢。

胡安·萨穆迪奥

回答

3

这是构建库的开发者面临的一个常见问题。如果它是一个预期的错误(你的控件不应该抛出一个异常而是优雅地处理这个错误)或者一个意外的异常情况(你的控件必须尽快抛出一个异常),试着去除错误并决定剩下的错误情况。

您可能还会看看Design By Contract,这是一种声明所需先决条件和保证后置条件的方法。这可能听起来很有道理,但它会导致更健壮的代码。

更新: 一个很好的介绍是http://se.ethz.ch/~meyer/publications/computer/contract.pdf

问候, tamberg

+0

看起来很有趣,我会看看,谢谢。 – 2008-11-13 17:20:47

0

未处理的异常,绝对应该抛出,以便使用你控制的人可以看到什么是错的。

+0

是的,这是真的,但IOException怎么样,我可以捕捉到,但我该怎么处理它,我通过MessageBox或一个IE浏览器的“黄色栏”通知错误。或者只是默默地处理它。 – 2008-11-13 17:16:34

0

只处理,你知道的,知道是做什么用的例外。不要打扰通用处理程序,如MessageBox。只要让它传播到有更多上下文来诊断错误的应用程序。他们有责任捕获任何异常,以便应用程序不会崩溃。在发生异常的情况下,他们无法做任何事情,因为它与控件的内部结构有关,所以应该自己处理,如果部分是用户的错误,则用例外消息说明缺少的内容,并将原始内容通过InnerException属性可用的异常。

0

除了上述内容之外,我还想提一下,您应该尝试让您的控件通过检查不同的对象状态和“预防”来避免异常,而不是允许引发异常。

养心神记住,抛出异常是一个相当昂贵的过程和(我已经在过去被告知)异常应该留给真正的“例外”意外情况......

顺祝商祺,
Frank