7
votes

C # Comment puis-je déclencher un événement à une heure de la journée spécifique?

Je travaille sur un programme qui devra supprimer un dossier (puis le ré-instancer) à une heure donnée de la journée et cette heure sera donnée par l'utilisateur.

L'heure sera probablement probablement pendant la nuit, car c'est quand personne n'accède au dossier (il est externe des heures de travail). Y a-t-il un moyen de déclencher cet événement à cette heure-là?

Je sais sur les minuteries, mais il y a-t-il un moyen plus facile de le faire sans une minuterie qui ticks et chèques pour voir quelle heure il est?

Modifier : Peut-être que je n'étais pas assez précis. Je veux déclencher une méthode pour faire quelque chose, sans avoir à le compiler d'abord dans un exécutable séparé. Cette méthode fait partie d'une classe plus importante mise en œuvre en tant que service Windows. Donc, ce service fonctionne continuellement, mais à une certaine heure de la journée, il devrait déclencher cette fonction pour supprimer le dossier.

Merci.


2 commentaires

Est-ce la seule tâche que votre programme est censé accomplir? Si oui, pourquoi ne pas utiliser le planificateur de tâches?


Vous ne pouvez pas configurer une minuterie pour cocher uniquement (maintenant, quand) .ToStalSeconds? Ce ne serait-il pas ce que vous vous moquez?


6 Réponses :


9
votes

Pensez à sortir de la boîte.

Pas besoin de codage sur ce type d'emploi - Utilisez Tâches planifiées , ils ont été sous Windows pendant longtemps. Vous pouvez lancer votre programme à partir de ceci.

mise à jour : (mise à jour suivante à la question)

Si vous devez déclencher une méthode à partir d'un service déjà exécutant , utilisez une minuterie et un test datetime.now contre votre heure cible.


1 commentaires

Merci, bonne idée. A également trouvé ce lien qui pourrait s'avérer utile pour les autres: social.msdn.microsoft.com/forums/forums/en-us/cshaarpanta/thread/ ...



1
votes

Démarrage ou directive possible: NCronTab


0 commentaires

2
votes

quand

  • Le programme commence
  • La minuterie a été changée
  • L'événement a fini

    Calculez le temps restant (en millisecondes) et définissez l'intervalle de la minuterie.


2 commentaires

Cela nécessiterait une application pour être en cours d'exécution. Il pourrait être plus approprié d'exécuter de tels problèmes de chronométrage dans un service.


@CITRO, oui, mais cela nécessite la complexité et les autorisations de communication avec un service. Ne sachant pas ce que le reste de l'application fait, j'ai choisi le chemin le plus court.



2
votes

Utiliser le planificateur Windows. Là, vous pouvez spécifier quel fichier est exécuté lorsque.


0 commentaires


8
votes

Si vous voulez le faire dans votre code, vous devez utiliser la classe de la minuterie et déclencher l'événement écoulé.

a. Calculez le temps laissé jusqu'à votre première heure d'exécution. P>

 public void doStuff(object sender, ElapsedEventArgs e)
 { 
        // Do your stuff and recalculate the timer interval and reset the Timer.
 }


0 commentaires