comment avoir une fonction à exécuter à l'intérieur d'un service toutes les 10 minutes?
J'ai un service windows en cours d'exécution, à l'intérieur de ce que je souhaite exécuter une fonction toutes les puis les minutes.
J'ai trouvé un peu de code, mais il ne semble pas fonctionner?
J'ai un enregistreur, et il ne semble pas aller dans le timer_Elapsed fonction jamais?
protected override void OnStart(string[] args)
{
//SmartImportService.WebService.WebServiceSoapClient test = new WebService.WebServiceSoapClient();
//test.Import();
log.Info("Info - Service Started");
_timer = new Timer(10 * 60 * 1000); //every 10 minutes??
_timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
}
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
log.Info("Info - Check time");
DateTime startAt = DateTime.Today.AddHours(9).AddMinutes(48);
if (_lastRun < startAt && DateTime.Now >= startAt)
{
//stop the timer
_timer.Stop();
try
{
log.Info("Info - Import");
SmartImportService.WebService.WebServiceSoapClient test = new WebService.WebServiceSoapClient();
test.Import();
}
catch (Exception ex) {
log.Error("This is my error - ", ex);
}
_lastRun = DateTime.Now;
_timer.Start();
}
}
- Avez-vous besoin d'appeler le démarrage de la Minuterie?
- voir stackoverflow.com/questions/246697/windows-service-and-timer
- pourquoi?
DateTime.Today.AddHours(9).AddMinutes(48);
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour démarrer la minuterie:
TimeSpan.FromMinutes(10).TotalMilliseconds;
au lieu de10 * 60 * 1000
Je ne vois pas
_timer.Start()
, qui devrait être votre problème.J'ai besoin de cette fonctionnalité. C'est, de mon C# windows service doit vérifier e-mail toutes les 10 minutes. J'ai dépouillé un peu de logique pour rendre le code plus efficace, comme suit :
La timer_elapsed méthode feront appel à toutes les 10 minutes, à partir de la première _timer.start(), qui vous le manquez, par la manière. Je n'ai pas fait de vérification de la _lastRun et startAt. Je ne pense pas que nous en avons besoin
Daniel Hilgarth est correct, le principal problème est que vous n'appelez jamais Démarrer le minuteur.
Cela étant dit, vous pouvez également envisager d'utiliser le Planificateur de Tâches de Windows au lieu d'un service avec une minuterie. Ceci vous permet de programmer l'exécution de la tâche toutes les 10 minutes, mais aussi de modifier l'horaire, chaque fois que souhaité sans une compilation de changement.
Essayez de démarrer le
timer
,