C # Как я могу вызвать событие в определенное время суток? - PullRequest
5 голосов
/ 19 марта 2010

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

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

Я знаю о таймерах, но есть ли более простой способ сделать это без таймера, который тикает и проверяет, который час?

РЕДАКТИРОВАТЬ : Может быть, я не был достаточно конкретным. Я хочу вызвать метод, чтобы сделать что-то, без необходимости сначала скомпилировать его в отдельный исполняемый файл. Этот метод является частью большого класса, который реализован как служба Windows. Таким образом, эта служба работает постоянно, но в определенное время дня она должна запускать эту функцию для удаления папки.

Спасибо.

Ответы [ 6 ]

8 голосов
/ 19 марта 2010

Думай из коробки.

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

Обновление : (после обновления до вопроса)

Если вам нужно вызвать метод из уже работающей службы , используйте таймер и проверьте DateTime.Now относительно вашего целевого времени.

5 голосов
/ 07 августа 2013

Если вы хотите сделать это в своем коде, вам нужно использовать класс Timer и вызвать событие Elapsed.

A.Рассчитайте время, оставшееся до вашего первого выполнения.

TimeSpan day = new TimeSpan(24, 00, 00);    // 24 hours in a day.
TimeSpan now = TimeSpan.Parse(DateTime.Now.ToString("HH:mm"));     // The current time in 24 hour format
TimeSpan activationTime = new TimeSpan(4,0,0);    // 4 AM

TimeSpan timeLeftUntilFirstRun = ((day - now) + activationTime);
if(timeLeftUntilFirstRun.TotalHours > 24)
    timeLeftUntilFirstRun -= new TimeSpan(24,0,0);    // Deducts a day from the schedule so it will run today.

B.Установите таймер события.

Timer execute = new Timer();
execute.Interval = timeLeftUntilFirstRun.TotalMilliseconds;
execute.Elapsed += ElapsedEventHandler(doStuff);    // Event to do your tasks.
execute.Start();

C.Настройте метод на выполнение того, что вы хотите сделать.

 public void doStuff(object sender, ElapsedEventArgs e)
 { 
        // Do your stuff and recalculate the timer interval and reset the Timer.
 }
2 голосов
/ 19 марта 2010

Использовать планировщик Windows.Там вы можете указать, какой файл будет выполнен, когда.

2 голосов
/ 19 марта 2010

Когда

  • программа запускается
  • таймер был изменен
  • событие закончено

рассчитать оставшееся время (в миллисекундах) и установить интервал таймера.

1 голос
/ 19 марта 2010

Программный интерфейс для запланированной задачи основан на COM, поэтому использовать его из .NET должно быть относительно легко (хотя я никогда не пробовал себя).

1 голос
/ 19 марта 2010

Возможный старт или ориентир: NCrontab

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...