我寫了擴展方法給Timer類,在一段時間後銷燬它。似乎它實際上只在timer.enable字段中設置了false,但並未真正將整個事物設置爲false。有沒有辦法從它自己的擴展方法中取消對象?我可以使用自己的擴展方法來刪除對象嗎?
另一件事是 - 以這種方式實現它的好實踐,還是我應該期待同步問題和更多的驚喜?
timer.DestroyAfter(1.Hours()):
public static void DestroyAfter(this Timer timer, TimeSpan timeSpan)
{
var killingTimer = new Timer(timeSpan.TotalMilliseconds)
{
AutoReset = false,
};
killingTimer.Elapsed += (sender, e) =>
{
timer.Stop();
**timer = null;** //doesn't seem to work though line is executed
killingTimer.Stop();
killingTimer = null;
};
killingTimer.Start();
}
Thanks.follow問題 - 因爲沒有人真的指向了殺死定時器(它的生命週期只在這個函數中) - GC有可能在定時器能夠執行其操作之前殺死它嗎?我的意思是 - 有沒有解釋說會殺死定時器將執行其行動? – user1025852 2012-08-13 05:32:47
Th GC不會觸及killingTimer,因爲它在「Elapsed」事件處理函數的閉包中被捕獲和引用。 – 2012-08-13 07:32:47