如果我的类没有实现IDisposable接口,并且如果类有定时器作为对象,那么处理定时器的最佳方法是什么,因为我们无法在类析构函数中处理定时器,因为对类析构函数的调用是非确定性的
答案 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在工作线程中很忙,则可能是一个问题。