1. 程式人生 > >關於C#定時器的一個容易犯的錯誤

關於C#定時器的一個容易犯的錯誤

先來看下面一段程式碼:

public partial class Form1 : Form
    {
        System.Windows.Forms.Timer aTimer = new System.Windows.Forms.Timer();
        public int t = 0;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            setTimer(sender,e);
        }

        public
void Event(object sender, EventArgs e) { t++; this.Text = "遊戲時間:" + t; } public void setTimer(object sender,EventArgs e) { aTimer.Tick+=new EventHandler(Event); aTimer.Enabled = true; aTimer.Interval = 1000; } }

這段程式碼想做的事情是當點選介面上的按鈕時會在窗體上面顯示時間計時,單位為秒:

這裡寫圖片描述

就像這樣。但是如果你再一次點選按鈕,那麼上面顯示的計時就不再是每次加1,而是每次加2;相應的,如果再點一次按鈕就會每次加3,依此類推。

由此可以看出,同一個定時器,繫結同一個事件可以多次,而且並行執行,所以我在這裡提醒大家如果存在這樣使用定時器的情況,程式出現了未知的錯誤一定看看是不是因此引起的,解決辦法就是,把aTimer.Tick+=new EventHandler(Event);語句放到一個只會執行一次的地方,不要放在按鈕這種會被點選多次的點選事件裡。