J'ai un service Windows en cours d'exécution, à l'intérieur de cela, je veux exécuter une fonction toutes les minutes. J'ai trouvé du code mais cela ne semble pas fonctionner? J'ai un enregistreur et il ne semble pas aller dans la fonction Timer_ELAPSED 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();
}
}
5 Réponses :
Vous devez démarrer la minuterie:
protected override void OnStart(string[] args)
{
log.Info("Info - Service Started");
_timer = new Timer(10 * 60 * 1000); // every 10 minutes
_timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
_timer.Start(); // <- important
}
Pour les 10 minutes, je préfère utiliser tispan.fromminutes (10) .totallilliseconds; code> au lieu de 10 * 60 * 1000 code>
Je ne vois pas _timer.start () code>, cela devrait être votre problème. P>
Essayez de démarrer la minuterie code>,
Daniel Hilgarth est correct - le problème principal est que vous n'appelez jamais démarrer sur la minuterie. P>
Cela étant dit, vous pouvez également envisager d'utiliser le planificateur de tâches Windows au lieu d'un service avec une minuterie. Cela vous permet de planifier la tâche à exécuter toutes les 10 minutes, mais modifiez également le calendrier à tout moment sans changement de compilation. P>
J'ai aussi besoin de cette fonctionnalité. C'est-à-dire que mon service Windows C # doit vérifier le courrier électronique toutes les 10 minutes. J'ai dépouillé une logique pour rendre le code plus efficace, comme suit:
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
_timer.Stop();
try
{
EventLog.WriteEntry(Program.EventLogName, "Checking emails " + _count++);
}
catch (Exception ex)
{
EventLog.WriteEntry(Program.EventLogName, "This is my error " + ex.Message);
}
_timer.Start();
}
Avez-vous besoin d'appeler commencer sur la minuterie?
Voir Stackoverflow.com/questions/246697/Windows-Service-and-Timer
Pourquoi?
datetime.today.addhours (9) .Adminutes (48); code>