在具有长时间运行任务的单独线程中定时

时间:2014-04-13 13:33:50

标签: c# timer system.timers.timer

我有一个Windows服务,在start方法中,创建一个计时器并触发计时器立即执行。计时器是一个长时间运行的任务,因此services.msc中启动时的服务被检测为错误。它认为下面的计时器在一个单独的线程中运行,服务应该立即启动?

如果我删除下面的行,它工作正常但我希望服务在服务启动后触发。

_timer_Elapsed(null, null);

删除此行会使问题消失,但我希望如此:

protected override void OnStart(string[] args)
{
    _timer = new System.Timers.Timer();
    _timer.AutoReset = false;
    _timer.Interval = (Convert.ToInt32(ConfigurationManager.AppSettings["CheckInterval"]));
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(_timer_Elapsed);
    _timer.Enabled = true;
    _timer.Start(); // Get the timer to execute immediately
    _timer_Elapsed(null, null); // Get the timer to execute immediately
}

1 个答案:

答案 0 :(得分:1)

_timer_Elapsed(null, null); // Get the timer to execute immediately

这不会立即触发计时器。它只是执行定时器设置执行的相同过程。就在OnStart的主题中。

如果您希望立即触发计时器,请将第一轮的间隔设置为1或小。