是否应该在“尝试”之前或之后更改光标,为什么?

时间:2012-07-02 18:24:01

标签: c# winforms

像这样:

Cursor.Current = Cursors.WaitCursor;
try {
  . . .
} finally {
    Cursor.Current = Cursors.Default;
}

或者这个:

try {
  Cursor.Current = Cursors.WaitCursor;
  . . .
} finally {
    Cursor.Current = Cursors.Default;
}

5 个答案:

答案 0 :(得分:3)

两种方法之间没有区别,因为将预定义的游标分配给Cursor.Current不会抛出异常。如果您从资源文件加载游标,该行为实际上可能会抛出异常(例如,如果找不到指定的资源)。

重要的是将光标设置为finally块中所需的状态,您可以在两个示例中执行此操作。

答案 1 :(得分:1)

问问自己,该行的结果会抛出异常吗?在这个简单的情况下,只要当且仅当抛出任何异常时,您返回到finally子句中的正常状态并不重要。就个人而言,我不会抛出该行Cursor.Current = Cursors.WaitCursor,因为它不会抛出异常(你只是在做一个赋值)。

答案 2 :(得分:1)

如果你把它放在里面没关系,除非它会抛出异常

如果它确实抛出异常,那么你应该只处理它在catch块中抛出的特定异常类型,或者在程序退出之前处理最终安排和释放资源finally块。

以下是您阅读的一些好消息:http://msdn.microsoft.com/en-us/library/ms173160.aspx

答案 3 :(得分:1)

将第一个游标分配放在try块中是没有害处的。正如其他人所指出的那样,如果您确定分配永远不会抛出异常,那么它并不一定要在try块内部。如果你不确定,最好将它放在try块中。

作为一般编码模式,如果您不确定语句是否可以抛出异常,请将其放在try块中。最好将它放在try块中并且不需要它而不是假设/猜测错误并将它放在try块之外,当你确实需要它时。

答案 4 :(得分:0)

我会在尝试之前放置Cursor设置器。原因是你的try / finally方法确保try-block中的代码在抛出异常时不会影响Cursor。但是,您并没有尝试防止Cursor属性本身的错误。如果那里有错误,那么你将要么单独处理它,要么让它导致一个未处理的异常,这将推翻应用程序。你想要的最后一件事是设置Cursor抛出一个异常,只是为了在你的finally块中再次设置它时得到另一个异常:你只会在崩溃报告中看到第二个异常并且它可能会向你发送错误你去调试时的路径,浪费了很多时间。