2010-12-15 42 views
1

Je développe une application en C# 4.0. J'ai besoin d'appeler une méthode en fonction de l'heure actuelle du système. Puis-je le faire en utilisant le contrôle Timer? Ce serait génial si quelqu'un pouvait me dire comment faire ça.Déclenchement d'actions en utilisant Timer dans C#

Merci, Rakesh.

Répondre

2

Vous pouvez utiliser le code ci-dessous

System.Timers.Timer _timer1 = new System.Timers.Timer(); 
_timer1.Elapsed += new ElapsedEventHandler(_timer1_Elapsed); 
//1 second 
_timer1.Interval = 1000; 
_timer1.Start(); 

//this event will be fired each 1 second 
private void _timer1_Elapsed(object sender, ElapsedEventArgs e) 
{ 
} 
1

Vous devriez être en mesure, oui. Ghyath Serhal vous a expliqué comment utiliser la classe de minuteur en général. Le seul bit manquant est comment le faire à un moment précis. Cela devrait être assez facile - lorsque vous configurez la minuterie, prenez juste le temps que vous voulez que l'action se produise et l'heure actuelle, trouvez la différence en secondes et utilisez ceci pour peupler l'intervalle. Vous devez également définir la propriété AutoReset sur false afin qu'elle ne commence pas à décompter immédiatement.

Si vous changez jamais le temps que les événements se produisent, vous avez juste besoin de brancher cela avec un déclencheur et mettre à jour la minuterie à la nouvelle heure.

Modifier pour ajouter: Si quelqu'un devait changer l'heure du système qui pourrait causer des problèmes avec ce plan. Je ne suis pas sûr si vous pouvez facilement puiser dans cela pour réinitialiser vos minuteries. Je suppose que probablement pas pertinent cependant. :)

3

Vous pouvez (sans en savoir plus sur votre application, je ne peux pas dire pour sûr) veulent regarder un peu différemment. Vous pouvez facilement écrire une application qui ne fait rien, excepté interroger l'heure, puis exécuter tout ce que vous avez à faire, mais cela laissera votre application traîner et ne fera rien d'autre que de prendre des ressources la plupart du temps. Au lieu de cela, vous pourriez peut-être envisager de créer une tâche planifiée, ce qui vous permettra d'exécuter votre application à tout moment. Le planificateur de tâches est documenté à http://msdn.microsoft.com/en-us/library/aa383614(VS.85).aspx et il existe un wrapper géré à http://taskscheduler.codeplex.com/. (il dit que cela fonctionne sur XP ou mieux, donc j'espère que cela couvrira vos besoins).

Bonne chance,

1

Le problème avec la minuterie est qu'il ne garantit pas que l'événement écoulé serait appelé exactement au bon moment - tout ce que vous savez est qu'il serait appelé après le temps qui est plus grand que la Intervalle. La solution dépend de la résolution de l'heure qui vous intéresse - par exemple, si vous devez vérifier chaque menuet si un événement spécifique se produit, vous pouvez définir un minuteur pour déclencher l'événement chaque menuet puis utiliser DateTime.Now pour vérifier si l'heure système est l'heure à laquelle l'événement doit se produire.

Une bonne politique est de toujours attendre l'événement écoulé de la minuterie arrive quelques secondes après l'intervalle défini en fonction de la façon dont le système est occupé.