2012-07-02 23 views
2

像這樣:應該在「嘗試」之前還是之後更改光標,爲什麼?

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

或本:

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

+1

你爲什麼要把它放在try裏面,它不會拋出異常嗎? – JonH

+0

建議(微軟認證考試70-536自學軟件套裝書)除了簡單無害的東西(如聲明)之外的所有代碼都放在try-catch模塊中,並確定可能無害或不會造成錯誤決策的風險,爲了安全起見,如果您不確定是否可以拋出異常,可以將它放在try-catch塊中。 –

+0

nop。沒有例外。 Batuu

回答

1

有在把try塊內第一光標分配沒有壞處。正如其他人所指出的那樣,如果您確實知道賦值永遠不會拋出異常,那麼它並不一定需要放在try塊中。如果你不確定,最好把它放在try塊中。

作爲一般的編碼模式,如果您不確定某個語句是否可以拋出異常,請將其放入try塊中。最好把它放在try塊中,而不是需要它,而不是假設/猜錯,當你真的需要它時,把它放在try塊之外。

1

問問自己,該行的結果是否會引發異常?在這種簡單的情況下,只要當且僅當拋出任何異常時,纔會返回到finally子句中的正常狀態。就個人而言,我不會拋出那條線Cursor.Current = Cursors.WaitCursor,因爲這不會拋出異常(你只是在做一個任務)。

3

這兩種方法之間沒有區別,因爲將預定義的光標分配給Cursor.Current不會引發異常。如果您正在從資源文件加載遊標,則該操作實際上可能會引發異常(例如,如果未找到指定的資源)。

重要的是將光標設置爲finally塊中的所需狀態,您在兩個示例中都執行此操作。

1

如果你把它放在裏面沒有關係,除非它會拋出異常

如果它確實會拋出異常,那麼您應該只處理它在catch塊中拋出的特定類型的異常,或者在程序退出前使用finally塊處理最終安排並釋放資源。

這裏有一些好的信息,爲您在讀了起來:http://msdn.microsoft.com/en-us/library/ms173160.aspx

+0

您不處理finally塊中的特定異常。 – dthorpe

0

我會在嘗試之前放置Cursor setter。原因是你的try/finally方法確保try-block中的代碼不會影響Cursor,如果它拋出異常的話。然而,你並沒有試圖防止來自Cursor屬性本身的錯誤。如果出現錯誤,那麼您需要單獨處理它,或者讓它導致一個未處理的異常,從而將應用程序拆除。你最不希望發生的事情是將Cursor設置爲拋出一個異常,只是爲了在你的finally塊中再次設置異常時纔得到另一個異常:你只會在崩潰報告中看到第二個異常,並且可能會將錯誤發送給你當你去調試它時,會浪費你很多時間。

相關問題