当我按下button1时,tabatas的值立即从8变为1,然后timer1_tick方法正确地运行一次。
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--;
}
}
我在线上设置了一个断点(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();
}
答案 0 :(得分:3)
你的std::string* getName(int Instance) {
return (std::string*)(*(int*)(Instance + 0x28));
}
for (auto &i : getChildren(Players)) {
this->playerList->Items->Add(getName(i));
}
循环中没有任何内容可以导致延迟,所以它几乎瞬间完成。也许你认为{{1}}会阻塞一段时间,但事实并非如此。它只是在后台启动计时器并立即返回。
不确定您到底要做什么,但如果您希望{{1}}变量随时间缩小,请删除循环并在计时器事件处理程序中递减变量。