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

4voto

Ahmed Abuelnour Points 181

J'ai téléchargé un paquet Nuget qui peut le rendre si simple, vous pouvez l'avoir ici ActionScheduler

Il prend en charge la norme .NET 2.0

Et voici comment commencer à l'utiliser

using ActionScheduler;

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.

3voto

Chuck Conway Points 10293

Utilisez un Timer . Documentation sur les minuteurs .

2voto

Bloggrammer Points 234

Utilisation d'un DispatcherTimer :

 var _activeTimer = new DispatcherTimer {
   Interval = TimeSpan.FromMinutes(5)
 };
 _activeTimer.Tick += delegate (object sender, EventArgs e) { 
   YourMethod(); 
 };
 _activeTimer.Start();

1voto

Pato Points 397

Si vous avez besoin d'exécutions temporelles plus compliquées, comme linux cron, vous pouvez utiliser NCrontab.

J'utilise NCrontab en production depuis longtemps et il fonctionne parfaitement !

Nuget

Comment l'utiliser :

* * * * *
- - - - -
| | | | |
| | | | +----- day of week (0 - 6) (Sunday=0)
| | | +------- month (1 - 12)
| | +--------- day of month (1 - 31)
| +----------- hour (0 - 23)
+------------- min (0 - 59)

using NCrontab;
//...

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
  // run every 5 minutes
  var schedule = CrontabSchedule.Parse("*/5 * * * *");
  var nextRun = schedule.GetNextOccurrence(DateTime.Now);
  logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);    
  do
  {
    if (DateTime.Now > nextRun)
    {
      logger.LogInformation("Sending notifications at: {time}", DateTimeOffset.Now);
      await DoSomethingAsync();
      nextRun = schedule.GetNextOccurrence(DateTime.Now);
    }
    await Task.Delay(1000, stoppingToken);
  } while (!stoppingToken.IsCancellationRequested);
}

Ajoutez des secondes si nécessaire :

// run every 10 secs
var schedule = CrontabSchedule.Parse("0/10 * * * * *", new CrontabSchedule.ParseOptions { IncludingSeconds = true });

1voto

Mansour Fahad Points 66

Cela peut être réalisé en appliquant la boucle while et en appelant Thread.Sleep à la fin de la boucle.

while (true)
{
    //Your code
    Thread.Sleep(5000);
}

Veillez à inclure using System.Threading .

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