Llamar a un método cada x minutos

Quiero llamar a algún método cada 5 minutos. ¿Cómo puedo hacer esto?

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(); } } 

 var startTimeSpan = TimeSpan.Zero; var periodTimeSpan = TimeSpan.FromMinutes(5); var timer = new System.Threading.Timer((e) => { MyMethod(); }, null, startTimeSpan, periodTimeSpan); 

Basé esto en la respuesta de @ asawyer. Parece que no tiene un error de comstackción, pero algunos de nosotros sí. Aquí hay una versión que aceptará el comstackdor de C # en Visual Studio 2010.

 var timer = new System.Threading.Timer( e => MyMethod(), null, TimeSpan.Zero, TimeSpan.FromMinutes(5)); 

Use un Timer Documentación del temporizador

Comience un temporizador en el constructor de su clase. El intervalo es en milisegundos, por lo que 5 * 60 segundos = 300 segundos = 300000 milisegundos.

 static void Main(string[] args) { System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 300000; timer.Elapsed += timer_Elapsed; timer.Start(); } 

Luego llame a GetData() en el evento timer_Elapsed como este:

 static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { //YourCode } 
 while (true) { Thread.Sleep(60 * 5 * 1000); Console.WriteLine("*** calling MyMethod *** "); MyMethod(); } 

He subido un paquete de Nuget que puede hacerlo tan simple, puedes tenerlo desde aquí CrystalJobScheduler

Y aquí cómo empezar a usarlo

 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. 

Ejemplo de uso del temporizador

 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("..."); }