嗨,我正在研究c#窗口服务,因为我在onstart方法中设置了一些定时器代码,如下面的代码我粘贴了它:
protected override void OnStart(string[] args)
{
timerjob.Elapsed += new ElapsedEventHandler(CsvGenFromDatabase);
// ad 2: set interval to 1 minute (= 60,000 milliseconds)
timerjob.Interval = Convert.ToDouble(DueTime);
// ////ad 3: enabling the timer
timerjob.Enabled = true;
}
CsvGenFromDatabase是我的方法,这将是我的服务,这里我的问题是我设置了一个计时器(到期时间)大约1分钟,例如,如果我测试简单的卷工作意味着它表现良好,如果假设我给了一个巨大的音量当计时器(到期时间)相同1分钟时,服务要做的工作我面临一些错误,因为仍然服务工作没有完成但是时间1分钟过去了因为服务将轮询新实例过去的工作没有完全完成,因为这种情况如何处理我的服务,而不是在一个实例中服务的任何工作,请任何提出建议请
答案 0 :(得分:0)
在CsvGenFromDatabase
方法中,您可以在长时间运行的过程之前调用timerjob.Stop()
。一旦完成该过程,您可以致电timerjob.Start()
再次启动计时器。
示例:强>
private void CsvGenFromDatabase()
{
timerjob.Stop();
//long running process
timerjob.Start();
}
我假设timerjob
在全球范围内可用。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以执行的一种方法是在CsvGenFromDatabase中计时器。
做
timer.Enabled = false;
这将停止计时器。
然后当你完成。重新启用计时器。在finally块中重新启用。
因此,这将确保在再次运行计时器之前完成工作。有点脏,但它应该工作。
像这样的东西 在您的CsvGenFromDatabase
中CsvGenFromDatabase()
{
try
{
timer.Enabled = false;
//do your work
}
finally
{
timer.Enabled = true;
}
}