我试图找出为什么只有if语句中的第一行才是唯一正在执行的行。
bool messageDisplayed = false;
private void timer1_Tick(object sender, EventArgs e)
{
var position = axVLCPlugin21.input.Position;
label1.Text = string.Format("{0}% completed", position * 100);
if (position > 0.8 && messageDisplayed == false)
{
MessageBox.Show("80 has been passed");
messageDisplayed = true;
}
}
消息框不断出现,让我相信messageDisplayed = true
从未被设置过,所以我设置了一个断点来检查。
果然,它进入if语句,显示消息框,然后重新启动事件 - 无需转到messageDisplayed = true;
有人能够看到我在某个地方出错吗?
答案 0 :(得分:3)
MessageBox.Show()
"暂停"代码的执行。关闭messageDisplayed = true;
时会触发MessageBox
。
因此,请按以下方式修改代码:
if (position > 0.8 && !messageDisplayed)
{
messageDisplayed = true;
MessageBox.Show("80 has been passed");
}
答案 1 :(得分:0)
MessageBox会导致暂停运行,这会让您的事件再次触发,甚至在您的bool变量变为true之前。尝试将你的bool放在messagebox
之前