我有一个Windows应用程序,它只是一个带有计时器控件的表单。我已设法跟踪以下情况:
private void timer1_Tick(object sender, EventArgs e)
{
MessageBox.Show("Test");
timer1.Enabled = false;
}
将一次又一次打印测试,直到我停止程序。但是:
private void timer1_Tick(object sender, EventArgs e)
{
//MessageBox.Show("Test");
textBox1.Text += "t";
timer1.Enabled = false;
}
只需在文本框中添加一个“t”。
有人能告诉我为什么MessageBox.Show导致函数在计时器被禁用之前返回?
答案 0 :(得分:0)
在用户点击消息框后,您可以禁用计时器。
MessageBox.Show
显示模态对话框。在用户响应消息框后,它将返回(到调用方法)。如果您先禁用计时器,则不会再次触发该事件,并且用户将有足够的时间做出反应。
试试这个:
timer1.Enabled = false;
MessageBox.Show("Test");
答案 1 :(得分:0)
您是否在测试时单击“确定”,每次定时器单击?如果消息框一个堆叠在另一个上面,那是因为MessageBox.Show
在您关闭消息框之前不会返回。与此同时,消息泵将继续运行,并处理您的计时器消息。
答案 2 :(得分:0)
对MessageBox.Show
的调用会阻止执行timer1_Tick
,直到您关闭messsagebox,因此在此之后才会调用set timer1.Enabled = false;
。因此,计时器仍在运行,因此每次计时器触发时,timer
_ Tick`仍然会被调用,直到您在其中一个消息框上点击OK。
如果您希望显示消息框以停止计时器再次触发,您需要的是:
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false;
MessageBox.Show("Test");
}