#c_sharp #schedule #timer
Как вызывать метод в конкретное время каждый день или же одноразово?
Ответы
Ответ 1
Проблема вызова метода по расписанию не решается в общем виде. Дело в том, что в нужное время ваша программа может вовсе не работать! Поэтому, для начала, требуется придумать способ запуска программы по этому самому расписанию. Тут возможны три варианта: Планировщик Windows. Иногда кажется, что про него забыли - но он со временем становится только лучше. И если на том же XP администратор часто выключал планировщик - то в последних версиях винды он обычно все же оставлен включенным, потому что на него завязано много полезных программ и служб. Подробнее про создание задачи в планировщике windows можно увидеть тут: Creating Scheduled Tasks SQL Server Agent. Если вы используете SQL Server (а его использует довольно много проектов) - то и его агент будет где-то рядом. Процедура создания задачи описана на MSDN (там используются хранимые процедуры - то есть вам понадобится подключение к БД и права администратора сервера). В обоих случаях, вам будет нужен какой-то способ вызвать не программу целиком, а конкретный метод. Для этого можно: Выбирать метод для вызова исходя из аргументов командной строки. Тут может помочь пакет CommandLineParser из nuget. Использовать powershell. Поскольку powershell основан на CLR, из него можно обращаться к любым методам на C#: Add-Type -Path путь\к\сборке.dll [Ваш.Класс]::СтатическийМетод(Параметры) SQL Server Agent может вызвать встроенный powershell-скрипт, а планировщику windows будет нужен отдельный файл, лежащий на диске. Также, вероятно, вам придется обработать событие AppDomain.AssemblyResolve чтобы загрузить зависимые сборки. Можно написать свою службу, которая будет запущена все время и выполнять задачи. В этом случае вам может пригодиться библиотека Quartz.NET. Или же можно "накатать" свой велосипед (там основа - просто Thread.Sleep или Task.Delay в бесконечном цикле). В любом случае, основная проблема тут будет - хранение списка задач в каком-то постоянном хранилище (БД) или восстановление этого списка при запуске службы. Способ с хранением в БД больше подойдет для задач, создаваемых пользователем, а способ с восстановлением при запуске - для задач, определяемых настройками приложения.
Комментариев нет:
Отправить комментарий