如何使计时器只发射一次

时间:2009-06-11 18:35:08

标签: c# .net timer

我正在使用C#2.0并在Winforms上工作。我有两个应用程序(app1,app2)。  当app1运行时,它将自动调用app2。 我在app2中有一个计时器,在timer_tick中我激活了一个buttonclick事件。但是我希望这个按钮点击只在应用程序启动时被触发一次。

我面临的问题是出于一些不明原因,即使我使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)
{ 
}

5 个答案:

答案 0 :(得分:8)

我还没有对此进行过测试(因此可以进行编辑),但我怀疑是因为您在Form1_Activated事件中启用了计时器(mytimer.Enabled = true;)而不是表单最初加载时。因此,每次表单变为活动状态时,它都会重置启用计时器。

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

答案 1 :(得分:4)

public Form1 : Form()
{
   InitializeComponent();
   this.Load+= (o,e)=>{ this.button1.PerformClick();}
}

public void button1_Click(object sender, EventArgs e)
{
   //do what you gotta do
}

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

将计时器的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);
}