我通常避免使用局部变量来保存对计时器的引用,因为当局部变量超出范围时,计时器会被垃圾收集并停止触发。但是,我遇到了一些似乎通过附加到Elapsed
事件的 lambda 表达式中的闭包引用计时器本身来解决此问题的代码。
{
var bkgTimer = new System.Timers.Timer(timeDelay) {AutoReset = false};
bkgTimer.Elapsed += (sender, args) => Handler(e, bkgTimer);
bkgTimer.Start();
}
然后,在处理程序中:
private void Handler( ... timer)
{
...
timer.Dispose();
}
它似乎工作。这种方法有什么问题吗?我想知道它是否会导致内存泄漏,因为我不明白 lambda 闭包的生命周期是由什么控制的。