Я работаю над маленьким искателем веб-страниц, который будет запускаться в системном трее и каждый час пополнять веб-сайт в час.
Каков наилучший способ заставить .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);
}