Нужна помощь в написании планировщика повторяющихся задач - PullRequest
3 голосов
/ 05 января 2011

Мне нужно написать инструмент, который будет запускать повторяющиеся задачи по расписанию, настраиваемому пользователем. Я напишу его в C # 3.5, и он будет работать на XP, Windows 7 или Windows Server 2008. Задачи занимают около 20 минут. Пользователи, вероятно, захотят настроить несколько конфигураций: например, ежедневные, еженедельные и ежемесячные циклы. Использование планировщика заданий не вариант.

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

Каков наилучший способ написать это, чтобы он не поглощал ресурсы, не блокировал хост или не вел себя неправильно?

Ответы [ 2 ]

4 голосов
/ 05 января 2011

Лучшее, что вы можете сделать, - это не изобретать велосипед, используя возможности ОС. См. Статью Вызов планировщика задач в Windows Vista (и Windows Server 2008) из управляемого кода из Bart De Smet для очень точного использования планировщика задач Windows из C #.

Если по какой-то причине вам необходимо реализовать свой собственный сервис (например, больший контроль над зависимостями), я бы посмотрел некоторые реализации Cron с открытым исходным кодом на .NET-совместимых языках. Есть статья с кодом проекта кода под названием Реализация небольшой службы Cron в C # , которая, кажется, делает это. Основываясь на его статье Cron (по расписанию), основанной на событиях, в C # похоже, что Боб Крэйвенс проделал более тщательную работу в этой области или, по крайней мере, задокументировал свою работу более тщательно. Я уверен, что есть другие, если вы посмотрите вокруг, и что-то на основе Cron является хорошей отправной точкой.

1 голос
/ 05 января 2011

Я предлагаю написать службу Windows, которая использует базу данных SQlite для получения расписаний и добавить графический интерфейс для записи всего, что вам нужно, в базу данных, но не забудьте использовать

System.Timers.Timer 

, а не

System.Windows.Forms.Timer

В вашей службе Windows

...