我有这种扩展方法,可以在给定间隔后禁用计时器。是否可以保证GC不会销毁disableTimer变量(此方法中的局部变量)?还是有理由说明为什么此代码从现在开始的一个小时内就会生效。

timer.DisableAfter(1.Hours()) :

    public static void DisableAfter(this Timer timer, TimeSpan timeSpan)
    {
        var disableTimer = new Timer(timeSpan.TotalMilliseconds)
            {
                AutoReset = false,
            };

        disableTimer.Elapsed += (sender, e) =>
            {
                timer.Stop();
                disableTimer.Stop();
            };
        disableTimer.Start();
    }

最佳答案

没有担保,它是否会被垃圾收集,但是如果您不保留对计时器的引用,则肯定有资格进行收集。

请参阅此MSDN页面中的Timer,转到第一个示例源代码块,阅读上面的文本,以及显然是源代码块本身……实际上,所有有关Timer的垃圾收集。

http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx

10-01 00:12