哪种方法是使用 System.Timers.Timer 的正确方法?
我的意思是...我创建计时器,设置间隔以及在 Elapsed 事件上调用的方法。
double ms = 1000;
var t = new System.Timers.Timer(ms);
t.AutoReset = false;
t.Elapsed += (sender, e) => { runTask(); };
t.Start();
接下来是什么?应该在计时器上处理呼叫吗?我想我不能,否则 Elapsed 事件永远不会发生。
我是否应该在某个全局变量中注册计时器以避免丢失对它的引用,以便 GC 可以在调用 Elapsed 之前处理计时器?
如果是这样,一旦处理了 Elapsed 事件(因此我的任务已执行),我如何处理计时器?
如果您在长时间运行的进程(例如 Web 应用程序或 Windows 服务)期间使用计时器,如果您不想发生内存泄漏,则需要确保取消订阅计时器的已用事件处理程序希望垃圾收集器能够回收为 Timer 对象分配的内存。
System.Timers.Timer 实现 IDisposable,这里的指导原则是,如果您有一个实现 IDisposable 的类,则任何依赖于实现 IDisposable 的对象的类都应该实现 IDisposable 本身,并在调用对象本身时调用 Dispose() 方法。
System.Timers.Timer 就是一个完美的例子。这在幕后使用了 System.Threading.Timer,如果您查看反射器,您可以看到 System.Timers.Timer 上的 Dispose 方法的以下内容
public void Dispose()
{
this.timerBase.Dispose();
}
在这里,timerBase 只是 System.Threading.Timer 的一个实例,因此 Dispose 调用会级联到实现 IDisposable 的类的所有依赖项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)