Выполнение кода по расписанию - C#

Узнай цену своей работы

Формулировка задачи:

Подскажите пожалуйста, как реализовать такие задержки, к примеру я хочу чтобы определенный метод вызывался спустя каждые 2 часа. Без заморозки потока через Thread.Sleep на определенное время. К примеру имеем цикл
while(true)
{
    //если прошло 2 часа выполнить DoWork();
}
т.е. программа должна работать по часам в 0:00, 2:00, 4:00 итд. Такое возможно? Буду рад если будет какой-то примерчик. Заранее спасибо.

Решение задачи: «Выполнение кода по расписанию»

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*/}
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.571 из 5
Похожие ответы