代码之家  ›  专栏  ›  技术社区  ›  Paul Michaels

.NET计时器控件

  •  2
  • Paul Michaels  · 技术社区  · 14 年前

    我有一个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;            
        }
    

    有人能告诉我为什么MessageBox.Show会导致函数在计时器被禁用之前返回吗?

    3 回复  |  直到 14 年前
        1
  •  0
  •   Rob    14 年前

    呼叫 MessageBox.Show 阻止执行 timer1_Tick timer1.Enabled = false; 在那之后才会发生。因此,计时器仍在运行,因此 timer _嘀嗒`每次计时器启动时,仍然会有人打电话,直到你在其中一个消息框中点击OK。

    如果要显示messagebox以阻止计时器再次启动,则需要:

    private void timer1_Tick(object sender, EventArgs e)
    {
        timer1.Enabled = false;
        MessageBox.Show("Test");
    }
    
        2
  •  0
  •   GvS    14 年前

    之后 用户单击了messagebox。

    MessageBox.Show 显示模式对话框。它将在用户响应messagebox后返回(调用者方法)。如果先禁用计时器,事件将不会再次触发,用户将有足够的时间做出反应。

      timer1.Enabled = false;
      MessageBox.Show("Test");
    
        3
  •  0
  •   Kieren Johnstone    14 年前

    你是否在测试时点击OK,每次定时器点击?如果消息框一个接一个地堆积起来,那是因为 MessageBox.Show 在关闭messagebox之前不会返回。同时,一个消息泵将继续运行,并处理您的计时器消息。