2011-06-07 5 views
1

J'ai écrit un simple programme WinForm en C# qui affiche l'heure, en mettant à jour chaque seconde en créant un événement. Bien que cela commence bien, après un certain temps, je remarque qu'il se met à jour plus rapidement que chaque seconde. Comme plus de temps passe, il continue d'augmenter sa vitesse de mise à jour. Des pensées?Minuterie accélérer

public static void Update(){ 
    if(!Pause) { 
     aTimer = new System.Timers.Timer(1000); 
     aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
     aTimer.Enabled = true; 
    } 
} 

private static void OnTimedEvent(object source,ElapsedEventArgs e) { 
     Form1obj.updateLabel1(DateTime.Now.ToString()); 
} 

Dans ma classe Form:

public void updateLabel1(string msg) { 

    if (this.label1.InvokeRequired) 
    { 
     SetTextCallback d = new SetTextCallback(updateLabel1); 
     this.Invoke(d, new object[] { msg }); 
    } 
    else 
     this.label1.Text = msg; 

} 
+4

Assurez-vous que vous n'êtes pas abonné à 'OnTimedEvent' plusieurs fois. –

+0

@ zespri-regardant à nouveau le code, qui ressemble le coupable le plus probable. Vous voudrez peut-être l'ajouter comme réponse. – AllenG

+0

Plusieurs conditions entraînent un appel à Update(), mais je suis sûr qu'elles ne le font qu'une fois par seconde au total. Je vais essayer avec un seul et voir si c'est le problème. – Andrew

Répondre

2

Si vous appelez plusieurs fois la mise à jour vous serez souscrivez plusieurs fois au même événement.

ne Alors assurez-vous que le
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

une fois (lorsque la page est construite par exemple)

+0

Une fois le premier délai expiré, dois-je en faire un autre? – Andrew

+0

no. le minuteur n'est pas éliminé lorsqu'il expire. avez-vous lu le doc? – jgauffin

+0

Hmmm ... Je suppose que AutoReset est défini sur true par défaut? – Andrew