作者hcl012 (怪龍-卡西歐魯)
看板C_Sharp
標題[問題] 關於Timer控制項
時間Thu Aug 4 12:13:42 2011
我寫了一個測試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