[問題] Timer.Tick 事件重複載入運算的問題(有解)
功能需求: 設定一個T1值,未來要用來指定datatable的列數用,而讀取的周期靠timer設
定,timer1.Interval越短則讀資料頻率越快,
因此先簡單設定測試環境:
一個timer,用來設定頻率
一個label,用來顯示T1值
一個Button,用來控制timer開始與停止
程式碼如下:
public int T1 = 0; //T1初始值為0
private void button1_Click(object sender, EventArgs e)
{
if (button1.Text == "Stop") //暫停功能
{
button1.Text = "Start";
timer1.Enabled = false;
}
else //開始功能
{
InitializeTimer(); //初始化timer1設定
button1.Text = "Stop";
timer1.Enabled = true;
}
}
private void InitializeTimer()
// Call this procedure when the application starts.
{
timer1.Interval = 500; //時間間隔
timer1.Tick += new EventHandler(Timer1_Tick);
//每過一個interval就呼叫一次事件
}
private void Timer1_Tick(object Sender, EventArgs e)
//處理每過一個timer1.Interval被呼叫的事件
{
T1 ++;
label1.Text = "T1值目前為:" + T1.ToString();
//每過一個interval, 會顯示 0 1 2 3 ....
}
現在遇到的問題是,當我第一次按下去之後,我的label 很正確的顯示 0 1 2 3 ...,接
著我按暫停,
然後當我再度按下開始的時候, T++被重複載入了 , label會變成 5 7 9 ...,變成每
次加2
如果在暫停一次再開始,T++被重複載入第三次,label 12 15 18...,,變成每次加3
因為我需要即時檢視目前加到多少,而這個T1值需要被儲存,紀錄目前累積的值,
而需要在tick發生時自動T1+1,
我嘗試過把timer1.Tick += new EventHandler(Timer1_Tick); 從InitializeTimer()拉
出來到按開始鈕的那邊,還是一樣的結果,
所以問題卡在一個很矛盾的地方,我需要timer幫我累加、即時顯示,又不希望它記憶我
累加的方法(T++)
因此我想來想去實在想不到一個可以紀錄、又正確即時顯示,然後暫停過後不會重覆載入
T++的方法,還懇請版上高手解答了!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.133.70.53
※ 編輯: ravelive 來自: 140.133.70.53 (08/20 16:41)
※ 編輯: ravelive 來自: 140.133.70.53 (08/20 16:44)
→
08/20 17:25, , 1F
08/20 17:25, 1F
推
08/20 17:28, , 2F
08/20 17:28, 2F
→
08/20 17:29, , 3F
08/20 17:29, 3F
→
08/20 18:25, , 4F
08/20 18:25, 4F
經好心人提示,找到解決辦法了,在此提供答案:
InitializeTimer();這條移到form1下只宣告一次,
public Form1()
{
InitializeComponent();
InitializeTimer();
}
並且要將初始值改為:
private void InitializeTimer() //處理每一個timer實作的屬性欄位 // Call this
procedure when the application starts.
{
timer1.Interval = 100; //時間間隔: 1000代表一秒
timer1.Enabled = false; //一開始要是false,不然一執行馬上就開始跑值
timer1.Tick += new EventHandler(Timer1_Tick);
}
並且把事件修改為:
public void Timer1_Tick(object Sender, EventArgs e) //處理每過一個
timer1.Interval被呼叫的事件
{
T1 ++;
label4.Text = "T1值目前為:" + T1.ToString();
}
如此就可以正常跑了!! 原來我想破頭都想不出所以然的癥結,
原來是發生在初始化上。
※ 編輯: ravelive 來自: 140.133.70.53 (08/20 18:26)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章
10
113