如何在程序中触发计时器的滴答?

19

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

myTimer.Interval = 10000;

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

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

最后一行代码可以工作,但是否有更好或更合适的方式呢?

4个回答

40

我唯一会做的不同的事情是将实际的“Tick”功能移入一个单独的方法中,这样你就不必直接调用事件。

myTimer.Start();
ProcessTick();

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

private void ProcessTick()
{
    ...
}

首先,直接调用事件似乎是一种代码异味——通常意味着代码结构混乱。


+1 我忽略了这个明显且正确的方法,谢谢 Bevan。 - JYelton

9
在.NET中至少有4个不同的“计时器”类型。使用System.Threading可以获得一个特定的计时器,允许您设置初始延迟。
var Timer = new Timer(Timer_Elapsed, null, 0, 10000);

使用不同的计时器是有好处的,这篇文章详细讨论了它们。


+1 我不知道有些计时器允许设置初始延迟,谢谢。 - JYelton

3
你可以将间隔设置为1(0可能表示无限超时),并在第一次滴答时将其设置为10k。
计时器会“很快”滴答(取决于你使用的计时器类型,请参见this),但执行不会像你的解决方案中那样继续进行单击处理程序。
(我猜你从Bevan那里得到了解决方案。)

+1 这又是我忽略了显而易见的情况之一。Bevan的解决方案是我这种情况下的理想选择。 - JYelton
1
好的,我也认为Bevan的解决方案是最好的。 - Martin Konicek

0

使用两个计时器。

第一个计时器具有您想要使用的正常间隔,并仅启用第二个计时器。

第二个计时器的间隔为100毫秒,通常处于禁用状态。它运行您的代码,然后禁用自身。

要手动触发,请启用第二个计时器。

这还允许您使用完全限定名称到第二个计时器从另一个表单触发代码。我在从一个表单调用另一个表单时使用此功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接