Выполнение кода по расписанию - C#
Формулировка задачи:
Подскажите пожалуйста, как реализовать такие задержки, к примеру я хочу чтобы определенный метод вызывался спустя каждые 2 часа. Без заморозки потока через Thread.Sleep на определенное время.
К примеру имеем цикл
т.е. программа должна работать по часам
в 0:00, 2:00, 4:00 итд.
Такое возможно?
Буду рад если будет какой-то примерчик.
Заранее спасибо.
while(true) { //если прошло 2 часа выполнить DoWork(); }
Решение задачи: «Выполнение кода по расписанию»
textual
Листинг программы
using System; using System.Windows.Forms; namespace WindowsFormsApplication309 { public partial class Form1 : Form { public Form1() { InitializeComponent(); //срабатывает каждые 30 секунд (в X минут 0 секунд, и в X минут 30 секунд) и один раз - при запуске var task = new Task {TimeToRun = new DateTime(2015, 1, 1, 0, 0, 0), Interval = new TimeSpan(0, 0, 30)}; task.Action = delegate { MessageBox.Show("Task is running"); }; // var timer = new Timer() {Interval = 1000, Enabled = true}; timer.Tick += delegate { task.CheckAndRun(); }; } } public class Task { public TimeSpan Interval { get; set; } public DateTime TimeToRun { get; set; } public Action Action { get; set; } public void CheckAndRun() { var now = DateTime.Now; if(TimeToRun < now) { while(TimeToRun < now) TimeToRun += Interval; if(Action != null) try { Action(); } catch {/*TODO*/} } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д