从计时器内调度任务/方法

时间:2011-02-23 10:55:00

标签: c# .net windows-services timer scheduled-tasks

在Windows服务中,我想一小时一次一次。我想使用轮询计时器,而不是添加“Windows任务”。

在计时器回调中,我正在检查是否通过以下代码调用该方法,其中_config.PollingInterval是计时器的间隔。

if (DateTime.Now.Subtract(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, 0, 0)) < TimeSpan.FromMilliseconds(_config.PollingInterval)) {
    SendReport();
}

由于某种原因,在同一分钟内(例如08:00)满足条件两次。我想某处存在逻辑错误,因为它确保只有一个计时器。

有关工作甚至完全不同/更优雅方法的任何提示吗?

1 个答案:

答案 0 :(得分:0)

可能是这样的:

class Reporter
{
    int _HourLastRun;

    public Reporter()
    {
        _HourLastRun = -1;
    }

    public void SendIfNeeded()
    {
        var currentHour = DateTime.Now.Hour;

        if(currentHour != _HourLastRun)
        {
            _HourLastRun = currentHour;
            SendReport();
        }
    }
}

然后只需在创建计时器的情况下实例化此类,并将SendIfNeeded()放入计时器的回调中。