System.Threading.Timer

        /// <summary>
        /// 清理数据
        /// </summary>
        public void Clear()
        {
            // 立即启动计时器
            Timer tClear = new Timer((state) =>
            {
                BLLCommon.Clear();
            });

/* 若是只在构造函数中设置间隔时间,页没有这一行时,则只执行一次 */
            tClear.Change(TimeSpan.FromSeconds(0), TimeSpan.FromHours(CMMConstants.ClearInterval));

        }

PS: 在将Timer定义成全局变量,并在程序启动方法中调用 Change 方法时,按预期执行 。  直接new一个Timer实例,只执行一次的原因是否是因为被垃圾回收器回收了 ?

msdn上的一句话:

只要你使用的是Timer,你必须保留对它的引用。与任何托管对象一样,当没有引用它时,Timer会被收集垃圾。计时器仍然有效的事实并不能阻止它被收集。

原文地址:https://www.cnblogs.com/coder-soldier/p/7424024.html