我必须停止System.Timers.Timer吗?

时间:2017-09-25 12:35:59

标签: c# timer garbage-collection

所以我知道,因为问题Can Timers get automatically garbage collected?System.Timers.Timer首先不会被垃圾收集。

但我的实际问题是 - 我是否必须停止或处理Timer?

private void CreateTimer()
{
    var timer = new Timer();
    timer.Elapsed += TimerElapsed;
    timer.Interval = 30000;
    timer.AutoReset = true;
    timer.Enabled = true;
}

我的意思是这个Timer会永远运行。但是现在我不再需要在方法中创建Timer的对象了。我是否必须停止或处置它被垃圾收集的Timer

1 个答案:

答案 0 :(得分:3)

在你打电话给.Dispose()之前,我认为不会收集垃圾。你是否.Stop()计时器并不重要。

因此,调用Timer.Stop()或将Timer.Enabled设置为false似乎已足够,因为这会为您调用Timer.Dispose()。 参考:Timer.Enabled

来自MSDN:

  

在释放对Component的最后一个引用之前,请始终调用Dispose。否则,在垃圾回收器调用Component对象的Finalize方法之前,不会释放它正在使用的资源。   More here

如果您希望将其自动处理掉,请使用Timer.Elapsed属性将该逻辑放在单独的方法中,如Here所述。