我公司开发了Windows服务应用程序,并在一些客户中安装。 他们抱怨服务在连续运行几天后停止。
我无法重现错误,我没有任何堆栈跟踪。我所拥有的只是事件查看器中的通用消息:
'myservicename'服务意外终止。它已经完成了这一次。
我的代码:
private System.Timers.Timer myTimer;
private readonly Queue<FileInfo> MyQueue = new Queue<FileInfo>();
protected override void OnStart(string[] args)
{
myTimer = new System.Timers.Timer(1000 * 60 * 1); // 1 min
myTimer.Elapsed += new ElapsedEventHandler(MyMethod);
myTimer.Start();
SomeSafeTasks();
try
{
CreateSomeThreads();
}
catch(Exception)
{
//log
}
}
public void MyMethod()
{
lock (MyQueue) // there are other places with lock
{
if(MyQueue.Count == 0)
{
// code with try catch
}
}
}
我认为该错误与定时器被GC相关。
GC.KeepAlive(myTimer)
之后添加myTimer.Start()
是否100%安全? GC.KeepAlive
?