На самом деле есть нечто встроенное в Windows , которое будет делать именно это.Он называется Планировщик заданий Windows !Вместо того, чтобы иметь приложение Windows, которое сидит и ждет нужного времени для запуска фрагмента кода, вам лучше использовать базовую системную утилиту и хранить фрагмент кода для запуска в отдельном исполняемом файле: это проще и более эффективно .
Ранее я использовал планировщик задач, чтобы настроить приложения для запуска по довольно определенному расписанию.Лучший способ сделать это из приложения .NET - это использовать эту удобную маленькую библиотеку .
По сути, чтобы выполнить то, что вы заявили в своем вопросенеобходимо создать приложение для Windows, которое предоставляет графический интерфейс.Этот графический интерфейс должен иметь параметры, которые регулируют создание и изменение задачи.Задача должна запустить код, который вы должны запустить (вы должны хранить его в отдельном исполняемом файле, вероятно, как прозрачное и, следовательно, скрытое приложение WinForms).
Вот код из статьи CodeProjectсамой библиотеки , которая иллюстрирует, как создать задачу:
//Get a ScheduledTasks object for the local computer.
ScheduledTasks st = new ScheduledTasks();
// Create a task
Task t;
try {
t = st.CreateTask("D checker");
} catch (ArgumentException) {
Console.WriteLine("Task name already exists");
return;
}
// Fill in the program info
t.ApplicationName = "chkdsk.exe";
t.Parameters = "d: /f";
t.Comment = "Checks and fixes errors on D: drive";
// Set the account under which the task should run.
t.SetAccountInformation(@"THEDOMAIN\TheUser", "HisPasswd");
// Declare that the system must have been idle for ten minutes before
// the task will start
t.IdleWaitMinutes = 10;
// Allow the task to run for no more than 2 hours, 30 minutes.
t.MaxRunTime = new TimeSpan(2, 30, 0);
// Set priority to only run when system is idle.
t.Priority = System.Diagnostics.ProcessPriorityClass.Idle;
// Create a trigger to start the task every Sunday at 6:30 AM.
t.Triggers.Add(new WeeklyTrigger(6, 30, DaysOfTheWeek.Sunday));
// Save the changes that have been made.
t.Save();
// Close the task to release its COM resources.
t.Close();
// Dispose the ScheduledTasks to release its COM resources.
st.Dispose();
ПРИМЕЧАНИЕ. Параметр priority
никогда не работал для меня, всегда вызывая сбой приложения.Я рекомендую вам оставить это;как правило, это не имеет большого значения.
На странице статьи имеется больше примеров кода *1029*, некоторые из которых показывают, как изменить настройки задачи,список всех запланированных задач и т. д.