我有一个控制台应用程序,该应用程序每10秒运行一次方法。根据以下代码,该方法由计时器触发:
using System.Threading;
public class remoteConnectionManager
{
private Timer heartbeatTimer = new Timer(heartbeatBegin, null, 10000, Timeout.Infinite);
private void heartbeatBegin(object obj)
{
Console.WriteLine("Heartbeat began");
try{
//Run code here
}
finally{
heartbeatTimer.Change(10000, Timout.Infinite);
Console.WriteLine("Timer changed");
}
}
}
public static class globalHolder
{
public static remoteConnectionManager rConnMan = new remoteConnectionManager();
}
我的问题是,大约6个小时后,计时器完全停止点火。在控制台中看到的最终输出是“心跳开始”。
我尝试同时使用System.Timer和System.Threading.Timer,但都遇到了问题,这使我怀疑这是我的代码存在问题。人们建议计时器超出范围,但是我不确定如果对象被静态设置为静态,该怎么办。
我尝试过的另一种解决方案是将heartbeatTimer.Change()
替换为
heartbeatTimer = new Timer(heartbeatBegin, null, 10000, Timeout.Infinite);
但没有帮助。
感谢您的帮助!
编辑:控制台应用程序在Windows 7计算机上运行,并且睡眠和Windows更新已关闭
编辑2:我也尝试实现catch{}
部分,但无济于事。几个小时后,计时器仍会停止触发。