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:
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/