定时器启动时调用Tick事件

时间:2012-08-22 12:57:52

标签: c# timer

我正在使用'System.Windows.Forms.Timer'来重复任务。但是当计时器启动时,我必须在任务开始之前等待一个间隔。间隔设置为10秒,以便给任务足够的时间来完成它。但是有一种“尴尬的沉默”等着它第一次开始。有没有办法在启用计时器时触发Tick事件? (我无法使用线程,回调或事件来重复任务)

    private int counter;
    Timer t = new Timer();

    private void InitializeTimer()
    {
        counter = 0;
        t.Interval = 750;
        t.Enabled = true;

        t.Tick += new EventHandler(timer1_Tick);
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (counter >= 3)
        {
            t.Enabled = false;                
        }
        else
        {
            //do something here
            counter++;
        }
    }

4 个答案:

答案 0 :(得分:8)

您可以随时手动调用方法:

private void InitializeTimer()
{
    counter = 0;
    t.Interval = 750;
    t.Enabled = true;
    timer1_Tick(null, null);

    t.Tick += new EventHandler(timer1_Tick);
}

答案 1 :(得分:8)

您可以使用System.Threading.Timer

这个constructor需要一段初始等待时间。将此值设置为零,计时器将立即触发回调,然后是您之后指定的每个间隔。

Timer stateTimer = new Timer(tcb, autoEvent, 0, 750);

答案 2 :(得分:3)

只需创建一个方法,然后在计时器内调用它,也就在启动计时器之前。

private int counter; 
Timer t = new Timer(); 

private void InitializeTimer() 
{ 
    counter = 0; 
    t.Interval = 750; 

    DoMything();
    t.Tick += new EventHandler(timer1_Tick); 
    t.Enabled = true; 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    if (counter >= 3) 
    { 
        t.Enabled = false;                 
    } 
    else 
    { 
        //do something here 
        counter++; 
        DoMything();
    } 
} 


private void DoMything()
{
   //Do you stuff here
}

答案 3 :(得分:1)

最简单的方法可能是将Interval初始设置为非常小的值,然后在Tick处理程序中或在单独的处理程序中增加它。

这将确保第一个“滴答”以与后续滴答相同的方式发生,例如在它自己的线程上,而不是在initialize方法的上下文中。