用于Windows服务的计时器,在没有多线程的情况下以指定的间隔进行轮询

时间:2014-07-25 12:22:36

标签: c# timer windows-services

我正在开发C# windows service,以指定的时间间隔(15分钟)顺序轮询多个数据库。我没有使用多线程,因为它是每个数据库的一个非常繁重的报告生成过程,并且在同一服务器上有其他OLTP应用程序使用相同的数据库,如果我们启动多个线程同时处理多个数据库,它将导致服务器关闭。

我需要知道应该使用哪个计时器System.TimerSystem.Threading.Timer。此外,当间隔设置为15分钟且数据库处理尚未完成且超过15分钟时,则间隔15分钟不应执行,直到所有处理完成。 任何人都可以帮忙。

1 个答案:

答案 0 :(得分:1)

使用System.Timers.Timer

并且在您处理定时器滴答的事件中,在处理过程中禁用定时器。完成工作后重新启用它。这样可以防止在处理过程中再次调用业务逻辑。

private void TimerEvent(object sender, System.Timers.ElapsedEventArgs e)
    {

        _serviceTimer.Enabled = false;
        DoWork();
        _serviceTimer.Enabled = true;
    }