Выполнение кода по расписанию - 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*/}
}
}
}
}