Exécuter une tâche de service Windows à un moment précis à l’aide de C #

J’ai déjà conçu mon service Windows qui inclut de nombreuses tâches (la même logique s’exécute toutes les xxx secondes), mais pour la nouvelle tâche, je dois le faire:

  • Téléchargez sur HTTP un fichier xml de liste de lecture à partir d’un référentiel CDN à une heure précise. Voir 03:12:12 pm.

Je recherche un code professionnel (juste un thread ou un squeleton) plutôt qu’un code qui fonctionne.

J’espère vous fournir toutes les informations nécessaires.

Meilleures salutations

Bratom

Si vous avez besoin d’une bibliothèque de planification, je recommanderais Quartz.Net , que j’ai utilisé dans différents projets avec de bons résultats.

Je sais que vous recherchez du code, mais lorsque nous avons besoin de tâches quotidiennes avec nos services, nous construisons le service et en laissons l’exécution au système d’exploitation.

Planifier des tâches

Il suffit de lancer une ligne de code dans un fichier .bat qui démarre le service et de planifier l’exécution de ce fichier de commandes à certaines heures.

Faire quelque chose à un moment donné n’est pas très différent de le faire périodiquement.

Disons que vous voulez faire quelque chose à un moment donné dans le futur. Nous appellerons targetDate .

 DateTime targetDate = GetActionTime(); // whatever // compute the difference between targetDate and now. // we use UTC so that automatic time changes (like daylight savings) don't affect it TimeSpan delayTime = targetDate.ToUniversalTime() - DateTime.UtcNow; // Now create a timer that waits that long ... Timer t = new Timer(TimerProc, null, delayTime, TimeSpan.FromMilliseconds(-1)); 

Cette timer déclenchera le rappel une fois. Si vous souhaitez que cela se répète tous les jours à la même heure, vous pouvez transmettre la date cible (ou peut-être une référence à l’enregistrement décrivant l’événement dans son intégralité) au processus de timer. Timer.Change de modifier l’ Timer.Change de la timer. Veillez à définir la période sur -1 millisecondes afin d’éviter qu’elle ne devienne un minuteur périodique.

Vous avez besoin de quelque chose comme une implémentation Cron en C #, essayez celle-ci: http://www.raboof.com/Projects/NCrontab/ ou http://sourceforge.net/projects/cronnet/