我写了扩展方法给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