Выполнение кода по расписанию - 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*/}
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д