定时器启动时调用Tick事件

我正在使用’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++; } } 

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

 private void InitializeTimer() { counter = 0; t.Interval = 750; t.Enabled = true; timer1_Tick(null, null); t.Tick += new EventHandler(timer1_Tick); } 

您可以使用System.Threading.Timer

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

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

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

 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 } 

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

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