我是否必须停止System.Timers.Timer?
所以我知道,因为Can Timers get automatically garbage collected?问题System.Timers.Timer
不会被垃圾收集在第一位。我是否必须停止System.Timers.Timer?
但我的实际问题是 - 我必须停止或处置计时器?
private void CreateTimer()
{
var timer = new Timer();
timer.Elapsed += TimerElapsed;
timer.Interval = 30000;
timer.AutoReset = true;
timer.Enabled = true;
}
我的意思是这个计时器将永远运行。但是现在我不再需要在Method中创建Timer的对象了。我是否必须停止或处置Timer
它被垃圾收集?
我不认为它会被垃圾收集,直到你拨打
.Dispose()
就可以了。无论你是否定时器
.Stop()
。
所以看来调用Timer.Stop()
或设置Timer.Enabled
为false应该是足够的,因为这将要求Timer.Dispose()
你。 编号:Timer.Enabled
从MSDN:
总是调用Dispose你释放你的最后一个引用组件之前。否则,在垃圾回收器调用Component对象的Finalize方法之前,它所使用的资源将不会被释放。 More here
如果希望它被自动处理掉,然后把该逻辑在一个单独的方法使用Timer.Elapsed
属性所解释Here。
否 - “我认为在你调用'.Dispose()'之前,它不会被垃圾收集。” - 那是不正确的。如果没有活引用,则不管是否调用了'.Dispose()',都将被GC'ed。 – Enigmativity
停止计时器已足够好,不需要显式Dispose()。这不是必需的,也不是IDisposable的意图。 Winforms会滥用它,但不会扩展到BCL类。 –
查看Timer类的实现,你是正确的。 'Timer.Stop()'实际上将'Enabled'设置为false,它调用'timer.Dispose()',因此调用'Timer.Stop()'应该足够了。我会更新答案。 – Achilles
stop和dispose之间有区别。在定时器的生命周期中停止计时器将会是人们需要的。 – apomene
您可以自己检查:在Elapsed中创建类似MesseBox.Show的东西,然后关闭它的所有者,例如通过关闭subWindow。 – sTrenat
我不认为它会被垃圾收集,直到你调用'dispose'。不管你是否停止计时器。更多在这里:'在你最后一次引用组件前,总是调用Dispose。否则,直到垃圾回收器调用Component对象的Finalize方法时,它所使用的资源才会被释放。“https://msdn.microsoft.com/en-us/library/3cc9y48w(v=vs.110).aspx – Achilles