2011-09-14 45 views
1

我有一個方法返回System.Timers.Timer,然後沿代碼使用它。 但MS代碼分析給出了一個警告:CA2000:在丟失範圍之前處理對象 是否可以手動Dispose Timer並因此不發現這樣的消息?返回定時器的處理方法

謝謝!

+0

這個muuust是一個騙局 –

+0

CA2000是臭名昭着的不準確。如果爲方法本身而不是方法調用生成警告,請翻轉忽略位。 –

回答

2

由於System.Timers.Timer impliments IDisposable你可以用你的方法調用在using語句,以確保Dispose被調用。

using(var timer = myClass.TimerMethod()) 
{ 
    // Do the work here 
} 
+1

如果我使用(){}方法返回Timer的方法內的代碼塊,對象將在方法調用後Dispose,因此Timer不起作用。 – drunkcamel

+0

完成使用後,您應該處置計時器。使用使用語句時,定時器可供您使用,直到使用語句完成爲止,並在此處處理它。你想如何使用你的計時器? –

+0

並且我的消化不是將代碼包裝在返回計時器的方法中,而是將調用包裝到方法中,以便在完成後處理計時器。 –

3

System.Timers.Timer實現IDisposable所以只是將其放在using

using(var timer = MyMethodThatReturnsTimer()) 
{ 
} 

如果您不能使用using不僅僅是打電話Dispose自己。

+0

他說他回報了這個物體。如果他按你說的做了,會出現錯誤。我認爲他只需要在對象完成時調用Dispose。 – Candide

+0

是的。我沿代碼使用返回的對象。問題在於我不能用(){}來包裝這段代碼。 – drunkcamel