2011-06-07 33 views
1

我在C#中編寫了一個簡單的WinForm程序,它顯示時間,通過創建一個事件來更新每一秒。雖然它開始很好,但過了一段時間,我發現它的更新速度比每秒更快。隨着時間的推移,它不斷提高更新速度。有什麼想法嗎?計時器加速

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()); 
} 

在我的窗體類:

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

確保你不訂閱'OnTimedEvent'幾次。 – 2011-06-07 20:06:30

+0

@ zespri-再次查看代碼,看起來像是最有可能的罪魁禍首。您可能希望將其添加爲答案。 – AllenG 2011-06-07 20:10:56

+0

有幾種不同的條件會導致對Update()的調用,但我確定它們每秒只能執行一次。我只用一個來試一下,看看這是不是問題。 – Andrew 2011-06-07 20:15:30

回答

2

如果調用更新多次,你會訂閱多次相同的事件。

所以一定要確保你只能做
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

一次(當頁面構造爲例)

+0

第一次計時器到期後,我需要再做一個正確的? – Andrew 2011-06-07 20:13:19

+0

沒有。計時器到期時不處理。你有閱讀文檔嗎? – jgauffin 2011-06-07 20:14:09

+0

嗯...我猜AutoReset默認設置爲true? – Andrew 2011-06-07 20:17:06