J'ai un service Windows qui accède essentiellement à une boîte aux lettres et lit les courriels. J'essaie de trouver la meilleure façon de vérifier la boîte aux lettres toutes les x secondes.Quelle est la meilleure façon d'appeler/démarrer un service Windows toutes les x secondes?
Une méthode consiste à appeler simplement Thread.Sleep, puis à rappeler la méthode de démarrage, par ex.
protected override void OnStart(string[] args)
{
// get config settings
CheckMailbox();
}
public void CheckMailbox()
{
int x = 5000;
// do stuff
Thread.Sleep(x);
CheckMailbox();
}
Vous ne savez pas si c'est la meilleure façon de procéder? Pour approfondir ensuite cette question, je comprends que vous pouvez appeler un service Windows en exposant le service via WCF. Dans ce cas, si une application Web appelait le processus pour démarrer, il y aurait des threads en conflit? Comment pourrais-je faire face à cela? Devrais-je créer un nouveau thread à chaque fois et le mettre dans une file d'attente?
+1 - ah, bon point! Pendant le sommeil, le service ne réagira pas à l'arrêt des événements, c'est vrai. –
Avec la minuterie Threading, disons que je vérifie la boîte aux lettres toutes les 10 secondes, et qu'il faut plus de 10 secondes pour ouvrir et traiter, cela aurait-il plusieurs threads fonctionnant à la fois correctement? – mickyjtwin
+1 Les minuteurs sont utiles! @mickyjtwin: Si vous utilisez le System.Timers.Timer, il a des méthodes Start et Stop, vous pouvez donc appeler Stop, traiter vos mails, puis appeler Start. De cette façon, vous devrez attendre x secondes après avoir fini de traiter vos mails jusqu'à la prochaine vérification. Cependant, je ne pense pas que vous obtiendriez des fils parallèles dans le cas que vous suggérez; la Tick devrait être invoquée sur le thread où le timer a été créé, pas sur un nouveau thread. –