Duplicate possible:
Comment ajouter une minuterie à une application console C #
Quel est le meilleur moyen d'implémenter une minuterie? Un exemple de code serait génial! Pour cette question, le "meilleur" est défini comme le plus fiable (le moins de ratés) et le plus précis. Si je spécifie un intervalle de 15 secondes, je souhaite que la méthode cible soit invoquée toutes les 15 secondes et non toutes les 10 à 20 secondes. D'autre part, je n'ai pas besoin d'une précision à la nanoseconde. Dans cet exemple, il serait acceptable que la méthode se déclenche toutes les 14,51 à 15,49 secondes.
Utilisez la classe Timer
.
public static void Main()
{
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aTimer.Interval = 5000;
aTimer.Enabled = true;
Console.WriteLine("Press \'q\' to quit the sample.");
while(Console.Read() != 'q');
}
// Specify what you want to happen when the Elapsed event is raised.
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine("Hello World!");
}
L'événement Elapsed
sera généré toutes les X millisecondes spécifiées par la propriété Interval
sur l'objet Timer. Elle appellera la méthode Event Handler
que vous spécifiez. Dans l'exemple ci-dessus, il s'agit de OnTimedEvent
.
En utilisant la classe System.Windows.Forms.Timer
, vous pouvez obtenir ce dont vous avez besoin.
System.Windows.Forms.Timer t = new System.Windows.Forms.Timer();
t.Interval = 15000; // specify interval time as you want
t.Tick += new EventHandler(timer_Tick);
t.Start();
void timer_Tick(object sender, EventArgs e)
{
//Call method
}
En utilisant la méthode stop (), vous pouvez arrêter le chronomètre.
t.Stop();
Il n'est pas clair quel type d'application vous allez développer (desktop, web, console ...)
La réponse générale, si vous développez l'application Windows.Forms
, est l'utilisation de
System.Windows.Forms.Timer classe. L'avantage de ceci est qu'il fonctionne sur le thread UI
, il est donc simple de le définir, de s'abonner à son événement Tick et d'exécuter votre code toutes les 15 secondes.
Si vous faites autre chose que Windows Forms (ce n'est pas clair dans la question), vous pouvez choisir System.Timers.Timer , mais ceci s'exécute sur autre thread, donc si vous allez agir sur certains éléments de l'interface utilisateur à partir de l'événement its Elapsed , vous devez le gérer. avec "invoquer" l'accès.
Référencez ServiceBase
à votre classe et mettez le code ci-dessous dans l'événement OnStart
:
Constants.TimeIntervalValue = 1
(heure) .. Idéalement, vous devez définir cette valeur dans le fichier de configuration.
StartSendingMails = nom de la fonction que vous souhaitez exécuter dans l'application.
protected override void OnStart(string[] args)
{
// It tells in what interval the service will run each time.
Int32 timeInterval = Int32.Parse(Constants.TimeIntervalValue) * 60 * 60 * 1000;
base.OnStart(args);
TimerCallback timerDelegate = new TimerCallback(StartSendingMails);
serviceTimer = new Timer(timerDelegate, null, 0, Convert.ToInt32(timeInterval));
}