可能重复:
Timer, event and garbage collection : am I missing something ?
如果我有以下代码:
public void SomeMethod()
{
Timer timer = new Timer();
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
在timer_Tick
完成后,{p>会SomeMethod
继续被重复调用,即使在任何地方都没有引用计时器吗?
我想也许它会一直调用Timer的Dispose方法。但是,一般来说,GC是否知道某个对象何时尚未处理?
答案 0 :(得分:2)
与此处的其他答案相反,不,计时器不会被垃圾收集。
在内部,启用计时器将分配一个GCHandle
对象,该对象将保留对象,从而保留计时器,从而保存实现事件处理程序的任何对象,直到您禁用它或程序为止结束,以先到者为准。
这已经在SO here: Timer, event and garbage collection : am I missing something ?上得到了解答,所以我将把这个问题作为重复来解决。
答案 1 :(得分:1)
任何地方都没有代码可以引用timer
;因此它有资格进行垃圾收集。
timer
对象本身引用了您的timer_Tick
方法,但这并不重要。它仍然可以收集。
答案 2 :(得分:0)
GC将在下一次抓取时收集它...它就像任何其他对象一样。 计时器引用事件,而不是事件的事件,因此它将是GC'd。