像这样:
Cursor.Current = Cursors.WaitCursor;
try {
. . .
} finally {
Cursor.Current = Cursors.Default;
}
或这个:
try {
Cursor.Current = Cursors.WaitCursor;
. . .
} finally {
Cursor.Current = Cursors.Default;
}
?
这两种方法之间没有区别,因为分配预定义的游标Cursor.Current
不会引发异常。如果您从资源文件加载游标,则该行为实际上可能会引发异常(例如,如果未找到指定的资源)。
重要的是在块中将光标设置为所需的状态finally
,这在两个示例中都是如此。
问问自己,那行的结果会抛出异常吗?在这种简单的情况下,只要当且仅当抛出任何异常时,您才可以在 finally 子句中返回正常状态。就个人而言,我不会抛出该行Cursor.Current = Cursors.WaitCursor
,因为它不会抛出异常(您只是在进行分配)。
把它放在里面没关系,除非它会抛出 Exception。
如果它确实引发了异常,那么您应该只处理它在catch
块中引发的特定类型的异常,或者在程序使用该finally
块退出之前处理最终安排并释放资源。
这里有一些很好的信息供您阅读:http: //msdn.microsoft.com/en-us/library/ms173160.aspx
将第一个游标赋值放在 try 块中并没有什么坏处。正如其他人所指出的,如果您确定分配永远不会引发异常,那么它并不一定需要在 try 块内。如果不确定,最好将其放在 try 块中。
作为一般的编码模式,如果您不确定语句是否会引发异常,请将其放在 try 块中。最好将它放在 try 块中而不需要它,而不是假设/猜测错误并将它放在 try 块之外,而当你确实需要它时。
我会在尝试之前放置游标设置器。原因是您的 try/finally 方法是确保 try 块中的代码在抛出异常时不会影响 Cursor。但是,您并没有试图防止来自 Cursor 属性本身的错误。如果那里有错误,那么您将需要单独处理它,或者让它导致未处理的异常,从而导致应用程序崩溃。你想要的最后一件事是将 Cursor 设置为抛出异常,只是在尝试在 finally 块中再次设置它时得到另一个异常:你只会在崩溃报告中看到第二个异常,它可能会让你出错当你去调试它的路径时,会浪费你很多时间。