如何以编程方式触发计时器?

假设我有一个配置了10秒(10k ms)间隔的Windows窗体计时器:

myTimer.Interval = 10000; 

我想启动它并立即启动Tick事件:

 myTimer.Start(); myTimer_Tick(null, null); 

最后一行有效,但有更好或更合适的方式吗?

我唯一不同的做法是将实际的Tickfunction移动到一个单独的方法中,这样您就不必直接调用该事件。

 myTimer.Start(); ProcessTick(); private void MyTimer_Tick(...) { ProcessTick(); } private void ProcessTick() { ... } 

首先,我这样做是因为事件的直接调用在我看来是一个代码气味 – 通常它表示spagetti结构代码。

.NET中至少有4个不同的“定时器”。 使用System.Threading你可以得到一个专门允许你设置初始延迟的。

 var Timer = new Timer(Timer_Elapsed, null, 0, 10000); 

使用不同的计时器有好处, 这里有一篇很好的文章讨论它们。

您可以将间隔设置为1(0可能意味着无限超时),并在第一次打勾时将其设置为10k。

计时器将“很快”打勾(取决于您使用的计时器类型,请参阅此计划 ),但执行将不会像解决方案中那样继续使用单击处理程序。

(我想你知道Bevan的解决方案)。