【问题标题】:C# Timer getting stopped after some timeC#计时器在一段时间后停止
【发布时间】:2016-08-18 05:08:41
【问题描述】:

我将此代码用于 C# 服务,“SomeFuction”应该每 6 分钟运行一次,但大约 30 分钟后它会停止。

我在这里缺少什么?我希望它一直运行到我的服务运行,请帮助:(

var timer = new System.Threading.Timer((e) =>
        {
            try
            { SomeFunction(arg1, arg2, arg3); }
            catch
            { return;}

        }, null, 0, 360000);

【问题讨论】:

  • 您使用 System.Threading.Timer 而不是 System.Timers.Timer 是否有原因?

标签: c#


【解决方案1】:

会不会是TimerGarbageCollector 处理掉了?似乎您只声明了 variablelocal scope 中保存 Timer-Reference。

为防止 GarbageCollection,请确保 Timer-Reference 存储在一个对象中,该对象在服务的整个生命周期中都存在。

查看此帖子以了解类似问题:Why does System.Threading.Timer stop on its own?

【讨论】:

  • 感谢 Manuel 的快速响应,我已将该变量更改为私有。现在我需要等待几个小时才能看到它是否有效。 :(谢谢你的帮助!干杯!
【解决方案2】:

其余的代码是什么样的? Timer 对象是否超出范围?

【讨论】:

  • 这不是答案应该是评论