.NET计时器控件

时间:2010-07-22 07:50:41

标签: c# .net timer

我有一个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导致函数在计时器被禁用之前返回?

3 个答案:

答案 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");
}