[問題] 關於Timer控制項

看板C_Sharp (C#)作者 (怪龍-卡西歐魯)時間14年前 (2011/08/04 12:13), 編輯推噓1(106)
留言7則, 3人參與, 最新討論串1/1
我寫了一個測試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

08/04 13:02, , 1F
當i=0 (i % 50)=true 且i--; 會無窮迴圈。
08/04 13:02, 1F

08/04 13:08, , 2F
timer不是Thread 遇到無窮就不會動了
08/04 13:08, 2F

08/04 13:48, , 3F
我知道了,感謝
08/04 13:48, 3F

08/04 13:52, , 4F
那請問有什麼方法能做到像我說的那種效果呢?
08/04 13:52, 4F

08/04 14:35, , 5F
請問您可以說明完整邏輯嗎? 因為for迴圈應該很快就跑完
08/04 14:35, 5F

08/04 14:35, , 6F
沒辦法進到timer_tick事件吧 @@
08/04 14:35, 6F

08/04 14:39, , 7F
另, AllenKuo的網站建議 if (flag) 比 if(flag==true)好
08/04 14:39, 7F
文章代碼(AID): #1EEXnw_W (C_Sharp)
文章代碼(AID): #1EEXnw_W (C_Sharp)