【发布时间】:2012-01-17 00:32:16
【问题描述】:
您好,我正在开发 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 分钟过去了,因为服务将轮询新实例,过去的工作没有完全完成,因为这种情况下,我如何处理我的服务而不影响任何工作,当服务在一个实例中时,请任何人提供建议
【问题讨论】:
-
你需要使
CsvGenFromDatabasereentrancy-safe...有不同的可能性(在运行或使用队列时忽略/禁用任何计时器事件,或者只是让它可以运行多次并行)。 -
将 AutoReset 属性设置为 false 并在 CsvGenFromDatabase() 结束时重新启用计时器。在方法开始时将 Enabled 设置为 false 并不能解决问题,线程池线程可以备份。一定要捕获并记录异常,Elapsed 事件会在没有诊断的情况下吞下异常。 System.Threading.Timer 是一个更好的计时器。
-
@Abdul Munim 感谢您的理解,如果您知道我是窗口服务的新手,请您建议一下
标签: c#