作者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
1F:推 a866559:当i=0 (i % 50)=true 且i--; 会无穷回圈。 08/04 13:02
2F:→ a866559:timer不是Thread 遇到无穷就不会动了 08/04 13:08
3F:→ hcl012:我知道了,感谢 08/04 13:48
4F:→ hcl012:那请问有什麽方法能做到像我说的那种效果呢? 08/04 13:52
5F:→ totte:请问您可以说明完整逻辑吗? 因为for回圈应该很快就跑完 08/04 14:35
6F:→ totte:没办法进到timer_tick事件吧 @@ 08/04 14:35
7F:→ totte:另, AllenKuo的网站建议 if (flag) 比 if(flag==true)好 08/04 14:39