144 votes

Appel d'une méthode toutes les x minutes

Je veux appeler une méthode toutes les 5 minutes. Comment puis-je le faire ?

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

224voto

asawyer Points 10642
var startTimeSpan = TimeSpan.Zero;
var periodTimeSpan = TimeSpan.FromMinutes(5);

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

63voto

Je me suis basé sur la réponse de @asawyer. Il ne semble pas avoir d'erreur de compilation, mais certains d'entre nous en ont. Voici une version que le compilateur C# de Visual Studio 2010 acceptera.

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

49voto

KyleMit Points 6937

Mise à jour de .NET 6

Pour la plupart des cas d'utilisation dans dotnet 6+, vous devriez utiliser l'option PeriodicTimer :

var timer = new PeriodicTimer(TimeSpan.FromSeconds(10));

while (await timer.WaitForNextTickAsync())
{
    //Business logic
}

Cette méthode présente plusieurs avantages, notamment la prise en charge de l'asynchronisme et de l'attente, l'élimination des fuites de mémoire dues aux rappels, et l'utilisation de la fonction d'appel. CancelationToken soutien

Autres lectures

13voto

Maiko Kingma Points 777

Démarrez une minuterie dans le constructeur de votre classe. L'intervalle est en millisecondes, donc 5*60 secondes = 300 secondes = 300000 millisecondes.

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

Ensuite, appelez GetData() dans le timer_Elapsed un événement comme celui-ci :

static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    //YourCode
}

5voto

user3333933 Points 11

Exemple d'utilisation d'un Timer :

using System;
using System.Timers;

static void Main(string[] args)
{
    Timer t = new Timer(TimeSpan.FromMinutes(5).TotalMilliseconds); // Set the time (5 mins in this case)
    t.AutoReset = true;
    t.Elapsed += new System.Timers.ElapsedEventHandler(your_method);
    t.Start();
}

// This method is called every 5 mins
private static void your_method(object sender, ElapsedEventArgs e)
{
    Console.WriteLine("..."); 
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X