我在.net中开发了windows服务。它需要每5秒运行一次。当我安装并启动我的服务时,它运行良好。但经过一段时间(1或2天)后,需要花费太多时间甚至闲置。这是我的启动代码:
protected override void OnStart(string[] args)
{
try
{
processThread = new Thread(new ThreadStart(this.InitTimer));
processThread.Start();
}
catch (Exception failedtoStart)
{
DebugLog.LogAlert(failedtoStart.ToString(), 2);
}
}
protected override void OnStop()
{
timer.Enabled = false;
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
if (isStarted)
{
isStarted = false;
[Some function]
isStarted = true;
}
}
catch (Exception ex)
{
DebugLog.LogAlert("Error: " + ex, 1);
}
}
private void InitTimer()
{
try
{
timer = new System.Timers.Timer();
timer.Elapsed += new ElapsedEventHandler(Timer_Elapsed);
timer.Interval = 5000;
timer.Enabled = true;
timer.Start();
}
catch (Exception ex)
{
DebugLog.LogAlert("Error: " + ex, 1);
}
}
如果我做错了什么,请纠正我。
答案 0 :(得分:0)
我还不能发表评论。 查看代码,您希望每5秒运行一次功能,但不能同时运行。 您可以在运行函数之前禁用计时器,然后在此之后启用,而不是维护布尔值来验证当前正在运行的方法。
try
{
timer.Enabled = false;
[Some function]
}
catch (Exception ex)
{
DebugLog.LogAlert("Error: " + ex, 1);
}
Finally{
timer.Enabled = true;
}
正如@Nawed Nabi Zada指出的,你应该重置旗帜事件,因为发生了异常。你的代码遗失了。