定时器在C#中配置

时间:2017-01-25 08:39:26

标签: c#

如果我的类没有实现IDisposable接口,并且如果类有定时器作为对象,那么处理定时器的最佳方法是什么,因为我们无法在类析构函数中处理定时器,因为对类析构函数的调用是非确定性的

4 个答案:

答案 0 :(得分:4)

如果您的班级使用一次性资源,您的班级应该实施IDisposable

答案 1 :(得分:1)

任何具有一次性资源的类都应实现 IDisposable接口,以便可以Dispose方法正确发布这些资源。

 public class MyClass : IDisposable
    {
        private Timer _timer = new Timer();

        public void Dispose()
        {
            //This way you can dispose your disposable resources used in class properly.
            _timer.Dispose();
        }
    }

答案 2 :(得分:0)

计时器应该在您不再需要时处理。

如果你的班级知道计时器何时变得无用,你只需写下:

timer.Dispose();

到那时候。

如果您的班级实例不知道计时器何时变得无用,这意味着您的对象不知道自己什么时候变得无用。因此,请让您的类实现IDisposable。这将处理对象的责任传递给了您的类的客户端代码。

答案 3 :(得分:0)

Timer类缺少一个IsDisposed属性。有一个字段变量disposed。通过反射,您可以实现IsDisposed属性。这是必需的,因为在处理时,Timer对象未设置为null。如果然后尝试不小心再次启动计时器,则会收到一条消息,提示其已被丢弃。通过检查可以防止这种情况。

为什么这可能是个问题?在Windows服务中实现计时器时,这可能是个问题。有时,计时器可以停止并再次启动。但是也应该可以配置计时器。如果那时Timer在工作线程中很忙,则可能是一个问题。