Вызов метода каждые x минут
Я хочу вызывать какой-то метод каждые 5 минут. Как я могу это сделать?
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("*** calling MyMethod *** ");
Console.ReadLine();
}
private MyMethod()
{
Console.WriteLine("*** Method is executed at {0} ***", DateTime.Now);
Console.ReadLine();
}
}
7 ответов:
var startTimeSpan = TimeSpan.Zero; var periodTimeSpan = TimeSpan.FromMinutes(5); var timer = new System.Threading.Timer((e) => { MyMethod(); }, null, startTimeSpan, periodTimeSpan);
Я основал это на ответе @asawyer. Он, кажется, не получает ошибку компиляции, но некоторые из нас делают. Вот версия, которую компилятор C# в Visual Studio 2010 примет.
var timer = new System.Threading.Timer( e => MyMethod(), null, TimeSpan.Zero, TimeSpan.FromMinutes(5));
использовать
Timer
. документация по таймеру.
запустить таймер в конструкторе вашего класса. Интервал находится в миллисекундах, поэтому 5 * 60 секунд = 300 секунд = 300000 миллисекунд.
вызовstatic void Main(string[] args) { System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 300000; timer.Elapsed += timer_Elapsed; timer.Start(); }
GetData()
наtimer_Elapsed
событие вроде этого:static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { //YourCode }
while (true) { Thread.Sleep(60 * 5 * 1000); Console.WriteLine("*** calling MyMethod *** "); MyMethod(); }
Я загрузил пакет Nuget, который может сделать его настолько простым, что вы можете получить его отсюда CrystalJobScheduler
а вот как начать его использовать
using CrystalJobScheduler; var jobScheduler = new JobScheduler(TimeSpan.FromMinutes(8), new Action(() => { //What you want to execute })); jobScheduler.Start(); // To Start up the Scheduler jobScheduler.Stop(); // To Stop Scheduler from Running.
пример использования таймера
using system.timers; static void Main(string[] args)() { Timer t = new Timer(TimeSpan.FromMinutes(5).TotalMilliseconds); // set the time (5 min in this case) t.AutoReset = true; t.Elapsed += new System.Timers.ElapsedEventHandler(your_method); t.Start(); } // this method calls every 5 min private void your_method(object sender, ElapsedEventArgs e) { Console.WriteLine("..."); }