C# 在UserControl中处理异常的正确方法

C# 在UserControl中处理异常的正确方法,c#,winforms,.net-3.5,C#,Winforms,.net 3.5,我正在构建一个UserControl,但我不确定如何处理异常,控件本身并不复杂,用户从磁盘选择了一个映像以便授权,我不知道控件将如何使用,因此如果我使用MessageBox,我可能会阻止应用程序,如果我只是重新抛出它,我可能会使它崩溃 提前谢谢 Juan Zamudio必须抛出未经处理的异常,以便使用您的控件的用户可以看到问题所在。这是构建库的开发人员面临的常见问题。尝试清除bug,并确定剩余的错误情况是预期错误(您的控件不应该抛出异常,而应该优雅地处理错误)还是意外异常情况(您的控件必须尽快抛

我正在构建一个UserControl,但我不确定如何处理异常,控件本身并不复杂,用户从磁盘选择了一个映像以便授权,我不知道控件将如何使用,因此如果我使用MessageBox,我可能会阻止应用程序,如果我只是重新抛出它,我可能会使它崩溃

提前谢谢


Juan Zamudio

必须抛出未经处理的异常,以便使用您的控件的用户可以看到问题所在。

这是构建库的开发人员面临的常见问题。尝试清除bug,并确定剩余的错误情况是预期错误(您的控件不应该抛出异常,而应该优雅地处理错误)还是意外异常情况(您的控件必须尽快抛出异常)

您还可以看看,一种声明所需先决条件和保证后决条件的方法。这听起来可能有点学术性,但它会带来更健壮的代码

更新: 一个好的介绍是

问候,,
tamberg

只处理您知道并知道如何处理的异常。不要使用通用处理程序,比如MessageBox。只要让它传播到有更多上下文用于诊断错误的应用程序。他们有责任捕获任何异常,以便应用程序不会崩溃。在异常情况下,由于与控件的内部结构有关,他们无法对其进行任何处理,您应该自己处理该异常,如果部分原因是用户的错误,则用一条消息包装该异常,说明缺少了什么,原始异常可通过InnerException属性获得。

除了所述内容,我还想提到的是,您应该通过检查不同的对象状态并“防止”而不是允许引发异常来尝试让您的控件避免异常

请记住,抛出异常是一个相当昂贵的过程,并且(正如我在过去被告知的)异常应该保留给真正的“异常”意外情况

致以最诚挚的问候,

弗兰克

是的,没错,但是IOException呢,我可以捕捉到,但是我该怎么处理它呢,我应该用消息框或“黄色条”通知错误,还是只是默默地处理它。一个好的介绍是