Я работаю над небольшим веб-сканером, который будет запускаться в системном трее и сканировать веб-сайт каждый час.
Какой лучший способ заставить .NET вызывать событие каждый час или через какой-то другой интервал для выполнения какой-либо задачи. Например, я хочу проводить событие каждые 20 минут в зависимости от времени. Событие будет возбуждено по адресу:
00:20
00:40
01:00
01:20
01:40
и так далее. Лучший способ сделать это - создать цикл в потоке, который постоянно проверяет, делится ли время на заданный интервал, и вызывает событие обратного вызова, если время достигнуто. Я чувствую, что должен быть лучший путь.
Я бы использовал Timer
, но я бы предпочел что-то, что следует «расписанию», которое выполняется в час, или что-то в этом роде.
Без настройки моего приложения в планировщике задач Windows это возможно?
UPDATE:
Я добавляю свой алгоритм для вычисления временного интервала для таймера. Этот метод принимает параметр "minute
", который является временем, когда таймер должен вызвать тик. Например, если параметр «minute
» равен 20, таймер будет отмечаться с интервалами в расписании выше.
int CalculateTimerInterval(int minute)
{
if (minute <= 0)
minute = 60;
DateTime now = DateTime.Now;
DateTime future = now.AddMinutes((minute - (now.Minute % minute))).AddSeconds(now.Second * -1).AddMilliseconds(now.Millisecond * -1);
TimeSpan interval = future - now;
return (int)interval.TotalMilliseconds;
}
Этот код используется следующим образом:
static System.Windows.Forms.Timer t;
const int CHECK_INTERVAL = 20;
static void Main()
{
t = new System.Windows.Forms.Timer();
t.Interval = CalculateTimerInterval(CHECK_INTERVAL);
t.Tick += new EventHandler(t_Tick);
t.Start();
}
static void t_Tick(object sender, EventArgs e)
{
t.Interval = CalculateTimerInterval(CHECK_INTERVAL);
}