2

像这样:

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

或这个:

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

?

4

5 回答 5

3

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

重要的是在块中将光标设置为所需的状态finally,这在两个示例中都是如此。

于 2012-07-02T18:25:55.977 回答
1

问问自己,那行的结果会抛出异常吗?在这种简单的情况下,只要当且仅当抛出任何异常时,您才可以在 finally 子句中返回正常状态。就个人而言,我不会抛出该行Cursor.Current = Cursors.WaitCursor,因为它不会抛出异常(您只是在进行分配)。

于 2012-07-02T18:25:55.650 回答
1

把它放在里面没关系,除非它会抛出 Exception

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

这里有一些很好的信息供您阅读:http: //msdn.microsoft.com/en-us/library/ms173160.aspx

于 2012-07-02T18:26:57.537 回答
1

将第一个游标赋值放在 try 块中并没有什么坏处。正如其他人所指出的,如果您确定分配永远不会引发异常,那么它并不一定需要在 try 块内。如果不确定,最好将其放在 try 块中。

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

于 2012-07-02T18:35:47.147 回答
0

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

于 2012-07-03T07:16:59.140 回答