C#Windows服务 – 多个定时器

我正在开发一个Windows服务,需要在不同的时期完成多项任务。

我目前有两个定时器,一个完整的定时器和一个股票定时器运行在不同的时间间隔定义如下。

fullTimer = new System.Timers.Timer(); fullTimer.Elapsed += new ElapsedEventHandler(OnElapsedTime); fullTimer.Interval = Convert.ToDouble(interval * 1000); fullTimer.AutoReset = true; fullTimer.Start(); // or fullTimer.Enabled = true; GC.KeepAlive(fullTimer); stockTimer = new System.Timers.Timer(); stockTimer.Elapsed += new ElapsedEventHandler(StockOnElapsedTime); stockTimer.Interval = Convert.ToDouble(stockInterval * 1000); stockTimer.AutoReset = true; stockTimer.Start(); GC.KeepAlive(stockTimer); 

任何人都可以看到为什么定时器不会被解雇。 我正在变得非常奇怪的行为。 如果我手动触发股票处理程序

 StockOnElapsedTime(null,null); 

计时器似乎继续正确启动。

从GC.KeepAlive的文档中,我想说你可能想要检查它是否在做你认为正在做的事情。 垃圾收集器将只保证保持对象在方法的开始和KeepAlive被调用之间的活动。 你可以让这些会留下来的物体的成员吗?

您应该将这些Timer实例存储在字段中。

调用GC.KeepAlive不会使对象无限期地活动。

就垃圾收集而言,如果计时器对象都是静态类字段,那么它们的当前实例将不会被垃圾回收,除非您稍后将字段设置为null或新对象,所以GC.KeepAlive是不必要的无论如何都不会帮助它在哪里被使用)。 这个代码在OnStart中被调用了吗?