使用Dispose来停止调用计时器

时间:2016-04-20 07:44:12

标签: c# timer reference null dispose

场合

我正在使用一个包含Timer对象的类来每隔X秒调用一个方法。 此类(因为它是MVVM概念的一部分)与UserControl.XAML紧密相连。

当用户“关闭”时,不再需要“MyClass”(包括计时器)的UserControl类对象。

我假设计时器对象将继续执行方法WriteLine("Called after 15 secs")单元垃圾收集器最终确定“MyClass”对象。

为了避免这种情况,我当然可以手动实现Dispose方法来销毁计时器对象。 (见例)

这是正确的方法吗?

(还有问题是否需要设置pullTimer = null

先谢谢你了!

示例

class MyClass : IDisposable {
    private System.Timers.Timer pullTimer;

    public MyClass(){
        pullTimer = new System.Timers.Timer(15000);
        pullTimer.Elapsed += (s, o) => { System.Diagnostics.Debug.WriteLine("Called after 15 secs"); };
        pullTimer.Start();
    }

    public void Dispose() {
        // Disposing action
        if(pullTimer != null) {
            pullTimer.Dispose();
            // below required?
            pullTimer = null;
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您应该调用计时器的=>方法以防止它被触发。

答案 1 :(得分:0)

同意Andrew Morton和Alexander给出的答案。 此外,您还可以禁用您不希望它运行的时间。 的 TimerObject.Enable = FALSE;