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

JYe*_*ton 15 c# timer

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

myTimer.Interval = 10000;
Run Code Online (Sandbox Code Playgroud)

我想启动它并Tick马上启动它:

myTimer.Start();
myTimer_Tick(null, null);
Run Code Online (Sandbox Code Playgroud)

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

Bev*_*van 32

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

myTimer.Start();
ProcessTick();

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

private void ProcessTick()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

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


Str*_*tto 9

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

var Timer = new Timer(Timer_Elapsed, null, 0, 10000);
Run Code Online (Sandbox Code Playgroud)

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