【问题标题】:How to make a timer fire only one time如何让计时器只触发一次
【发布时间】:2017-08-10 11:19:18
【问题描述】:

我正在使用 C#2.0 并使用 Winforms。我有两个应用程序(app1,app2)。 当 app1 运行时,它会自动调用 app2。 我的 app2 中有一个计时器,在 timer_tick 中我激活了一个 buttonclick 事件。但我希望这个 Button Click 在应用程序启动时只触发一次。

我面临的问题是由于某种未知的原因,即使我设置了 mytimer.Enable=false,计时器也会被触发不止一次。 有没有办法让我第二次不调用计时器。或者 有没有一种方法可以在不使用计时器的情况下自动触发按钮单击事件。

代码如下:

private void Form1_Activated(object sender, EventArgs e)
{
    mytimer.Interval = 2000;
    mytimer.Enabled = true;
    mytimer.Tick += new System.EventHandler(timer1_Tick);

}
private void timer1_Tick(object sender, EventArgs e)
{
    mytimer.Enabled = false;
    button1_Click(this, EventArgs.Empty);
}


private void button1_Click(object sender, EventArgs e)
{ 
}

【问题讨论】:

    标签: c# .net timer


    【解决方案1】:

    我尚未对此进行测试(因此请准备好进行编辑),但我怀疑是因为您在 Form1_Activated 事件中启用了计时器 (mytimer.Enabled = true;),而不是在表单最初加载时启用。所以每次表单激活时,它都会重置启用你的计时器。

    编辑: 好的,我现在已经验证了:假设您确实需要计时器,请将 mytimer.Enabled 移动到表单的构造函数中。

    【讨论】:

      【解决方案2】:
      public Form1 : Form()
      {
         InitializeComponent();
         this.Load+= (o,e)=>{ this.button1.PerformClick();}
      }
      
      public void button1_Click(object sender, EventArgs e)
      {
         //do what you gotta do
      }
      

      无需使用计时器。只需在表单加载时“单击”按钮即可。

      【讨论】:

      • 如果你不特别需要定时器,这是要走的路。
      【解决方案3】:

      您可以尝试删除处理程序而不是禁用计时器

      mytimer.Tick -= new System.EventHandler(timer1_Tick);
      

      【讨论】:

        【解决方案4】:

        可能与它无关,但我会在设置 EventHandler 后启用计时器。 (这在之前的项目中造成了悲痛,后来在两个语句之间插入了更多代码。)

        【讨论】:

          【解决方案5】:

          将定时器的AutoReset属性设置为falsehttp://msdn.microsoft.com/en-us/library/system.timers.timer.autoreset.aspx

          private void Form1_Activated(object sender, EventArgs e)
          {
              mytimer.Interval = 2000;
              mytimer.AutoReset = false;
              mytimer.Tick += new System.EventHandler(timer1_Tick);
              mytimer.start();
          }
          

          这也意味着您不必取消设置 Enabled

          private void timer1_Tick(object sender, EventArgs e)
          {
              mytimer.Enabled = false;
              button1_Click(this, EventArgs.Empty);
          }
          

          【讨论】:

          • System.Windows.Forms.Timer 没有 AutoReset 属性。
          猜你喜欢
          • 2015-07-30
          • 2014-08-04
          • 1970-01-01
          • 1970-01-01
          • 2019-11-21
          • 2013-10-08
          • 1970-01-01
          • 2012-01-05
          • 1970-01-01
          相关资源
          最近更新 更多