9

我正在使用“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

4 回答 4

12

您始终可以手动调用您的方法:

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

    t.Tick += new EventHandler(timer1_Tick);
}
于 2012-08-22T13:00:29.687 回答
8

你可以使用一个System.Threading.Timer.

这有一个构造函数,它需要一个初始等待期。将此设置为零,计时器将立即触发回调,然后是您指定的每个间隔。

Timer stateTimer = new Timer(tcb, autoEvent, 0, 750);
于 2012-08-22T13:04:09.943 回答
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
}
于 2012-08-22T13:01:20.397 回答
1

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

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

于 2012-08-22T13:00:48.173 回答