看板 C_Sharp 關於我們 聯絡資訊
我寫了一個測試Timer功能用的程式 namespace Timertest { public partial class Form1 : Form { bool flag = false; int displayNumber=1,i; public Form1() { InitializeComponent(); timer1.Interval = 1000; timer1.Start(); } private void timer1_Tick(object sender, EventArgs e) { if (flag == true) { label1.Text = Convert.ToString(displayNumber); flag = false; i++; displayNumber++; } } private void button1_Click(object sender, EventArgs e) { for (i = 0; i <= 1000; i++) { if (i % 50 == 0) { i--; flag = true; } } } } } 這個程式主要有兩個部分:button和timer 預期效果是 當按下button之後for迴圈會開始跑 然後在i是50的倍數時因為i--的關係先停下來 並且把flag變成true timer因為偵測到flag變成true了 將顯示出來的數字+1後,將i+1以讓button那邊的迴圈能繼續跑 但是執行後卻發現i為50的倍數時就陷入無限迴圈 timer那邊沒有將label印出來 trace timer那邊的code也沒有看到button那邊的程式將flag變成true的跡象 請問一下為什麼會這樣呢? 感謝各位的回答 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.199.183.252
a866559:當i=0 (i % 50)=true 且i--; 會無窮迴圈。 08/04 13:02
a866559:timer不是Thread 遇到無窮就不會動了 08/04 13:08
hcl012:我知道了,感謝 08/04 13:48
hcl012:那請問有什麼方法能做到像我說的那種效果呢? 08/04 13:52
totte:請問您可以說明完整邏輯嗎? 因為for迴圈應該很快就跑完 08/04 14:35
totte:沒辦法進到timer_tick事件吧 @@ 08/04 14:35
totte:另, AllenKuo的網站建議 if (flag) 比 if(flag==true)好 08/04 14:39