C# 多次调用计时器会产生奇怪的结果
当我按下按钮1时,tabatas的值立即从8变为1,然后timer1\u tick方法正确运行一次C# 多次调用计时器会产生奇怪的结果,c#,C#,当我按下按钮1时,tabatas的值立即从8变为1,然后timer1\u tick方法正确运行一次 int goSecondsLeft = 20; int restSecondsLeft = 10; int tabatas = 8; public Form1() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e)
int goSecondsLeft = 20;
int restSecondsLeft = 10;
int tabatas = 8;
public Form1()
{
InitializeComponent();
}
private void timer1_Tick(object sender, EventArgs e)
{
if (goSecondsLeft >= 0)
{
lbGoOrRest.Text = "Go!";
lbSecondsRemaining.Text = goSecondsLeft.ToString() + " seconds";
goSecondsLeft--;
}
else if (restSecondsLeft >= 0)
{
lbGoOrRest.Text = "Rest";
lbSecondsRemaining.Text = restSecondsLeft.ToString() + " seconds";
restSecondsLeft--;
}
else
{
timerGo.Stop();
}
}
private void button1_Click(object sender, EventArgs e)
{
while (tabatas > 0)
{
lbTabatasRemaining.Text = "Tabatas remaining" + tabatas.ToString();
timerGo.Start();
tabatas--;
}
}
我在while(tabataas>0)行上放置了一个断点,并不断地进行干预,每次while循环执行时,tabata的值都会按预期下降一个,但当我运行程序时,它会立即变为1,而timer1_tick方法会继续运行
我的工作代码如下:
else
{
goSecondsLeft = 20;
restSecondsLeft = 10;
tabatas--;
lbTabatasRemaining.Text = "Tabatas remaining" + tabatas.ToString();
timerGo.Stop();
}
}
private void button1_Click(object sender, EventArgs e)
{
timerGo.Start();
}
您的
while
循环中没有引起延迟的内容,因此它几乎是在瞬间运行的。也许你认为Timer.Start
会阻塞一段时间,但事实并非如此。它只是在后台启动计时器并立即返回
不确定您到底想做什么,但如果希望
tabatas
变量沿时间向下勾选,请删除循环并在计时器事件处理程序中减少变量。可能是线程相关的问题。为什么要在循环中重新启动计时器?还有,计时器的间隔是多少?间隔是1000ms,我希望time1Tick方法中的代码执行8次。我尝试在tick处理程序中递减tabata变量,但我不知道如何在每个tick都发生一次。我猜这是某种间隔计时器。你应该在你的代码中有一个地方,当你的“休息”阶段结束时,你可以将你的go/rest计数器重置为最大值-也许在那里减少它?是的,我在else语句中更改了代码,重置变量并减少tabata变量,它工作得非常好。