Решение для запуска компонента .NET на регулярной основе в Windows - PullRequest
3 голосов
/ 29 июля 2010

Мне нужно написать некоторый код .NET, который выполняется через регулярные промежутки времени, чтобы проверять наличие «необработанных» элементов в таблице в базе данных, обрабатывать их и затем записывать обратно в базу данных, что они обрабатываются. Мы, вероятно, настроим его на запуск каждую минуту.

Как настроить компонент в среде Windows Server, чтобы код выполнялся периодически?

Ответы [ 4 ]

3 голосов
/ 29 июля 2010

Создайте запланированное задание с помощью планировщика заданий Windows. Запланированное задание будет затем периодически запускать ваш скомпилированный .NET EXE (я предполагаю, что это EXE) Если вам нужно, чтобы он работал короче минуты, я думаю, что вам нужно перейти к службе Windows.

Вот хороший учебник о том, как настроить запланированное задание. Снимки экрана с Windows XP.

3 голосов
/ 29 июля 2010

Используйте System.Timers.Timer в вашей службе Windows.

Вы можете иметь такой код (из MSDN) в событии OnStart службы Windows:

// Hook up the Elapsed event for the timer.
timer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

// Set the Interval to 2 seconds (2000 milliseconds).
timer.Interval = 2000;
timer.Enabled = true;

...........

// Specify what you want to happen when the Elapsed event is raised.
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    ......
}

Если интервал не част, например, если он работает ежедневно, также рассмотрите возможность использования Планировщик заданий Windows . Он может запускать ваше приложение в течение заданного интервала (обратите внимание, что этот интервал не так часто).

2 голосов
/ 29 июля 2010

Запланированные задачи Windows (инструменты запуска программ, вспомогательное оборудование, системы) ... Планирование заданий SSIS ... Программное обеспечение сторонних разработчиков (Activebatch и т. Д.) ...

1 голос
/ 29 июля 2010

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

Если вы используете маршрут службы Windows, ваш метод Start () будет выглядеть примерно так:

Timer tmr = new Timer(60000, true) //this could be wrong: set it for one minute and turn on auto-reset.

tmr.Start();

Тогда у вас будет обработчик событий для обработки события Таймера (сейчас вы не можете вспомнить имя: тик, может быть?), Который будет вызывать ваш фактический код.

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

...