2013-07-11 2 views
1

Посмотрите на мой код:Вызов функции запуска каждый день в указать время

Timer myTimer = new Timer { Interval = 1000 }; 
public void button_Click(object sender, EventArgs e) 
{ 
    myTimer.Tick += new EventHandler(OnTick); 
    myTimer.Start(); 
} 
public void OnTick(object sender, EventArgs ea) 
{ 
    myTimer.Stop(); 
    Execute(); 
} 

Я хочу функцию Execute(); запускать каждый день в указать время, напр: 1h:5min, 1h:25min, 2h10min.... Я использую Timer, но я могу только запустить функцию каждые Interval времени. Как указать абсолютное время для таймера?

+0

Предполагая, что ваше приложение будет работать все время, вы можете написать какой-то класс 'AlarmClock', который поддерживает список делегатов и время их вызова. Внутренне таймер периодически запускал, проверяя, настало ли время называть любого из делегатов. –

+1

Это может быть полезно для вас http://stackoverflow.com/questions/3243348/how-to-call-a-method-daily-at-specific-time-in-c –

+2

Я рекомендую использовать запланированные задачи Windows. Как еще вы собираетесь гарантировать, что ваше приложение даже работает * в то время? –

ответ

0

Вы не можете указать абсолютное время для любого из встроенных классов таймера. Вы должны вычислить интервал вручную.

Другие решения, которые могут быть подходящими для вас:

  • Используйте планировщик как Quartz
  • Используйте окна запланированное задание
1

Вы можете вычислить количество миллисекунд, которое должно пройти между током время и время, когда Timer должен запускаться при запуске приложения. Установите количество миллисекунд для таймера Interval.

Пример:

TimeSpan ts = <datetime when timer should fire> - DateTime.Now; 

myTimer.Tick += new EventHandler(OnTick); 
myTimer.Interval = ts.TotalMilliseconds; 
myTimer.Start(); 

Когда таймер уволят, установить интервал снова, используя эту строку, чтобы убедиться, что он стреляет снова на следующий день в указанное время.

Это, конечно, предполагает, что ваше приложение действительно работает в то время, когда вы хотите запустить таймер.

Смежные вопросы