Планирование задач / методов из таймера - PullRequest
0 голосов
/ 23 февраля 2011

Из службы 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 голосов
/ 23 февраля 2011

может быть что-то вроде этого:

class Reporter
{
    int _HourLastRun;

    public Reporter()
    {
        _HourLastRun = -1;
    }

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

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

Затем просто создайте экземпляр этого класса, где вы создадите свой таймер и поместите SendIfNeeded() в функцию обратного вызова таймера.

...