C# 如何以编程方式触发计时器滴答声?

C# 如何以编程方式触发计时器滴答声?,c#,timer,C#,Timer,假设我有一个配置了10秒(10k毫秒)间隔的Windows窗体计时器: myTimer.Interval = 10000; 我想立即启动它并触发勾选事件: myTimer.Start(); myTimer_Tick(null, null); 最后一行可以工作,但有更好或更合适的方法吗?您可以将间隔设置为1(0可能意味着无限超时),并在第一次滴答声时将其设置为10k 计时器将勾选“很快”(取决于您使用的计时器类型,请参阅),但不会像解决方案中那样使用单击处理程序继续执行 (我想您是从Bevan

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

myTimer.Interval = 10000;
我想立即启动它并触发
勾选
事件:

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

最后一行可以工作,但有更好或更合适的方法吗?

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

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


(我想您是从Bevan那里知道这个解决方案的)。

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

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);
使用不同的计时器有很多好处,这是一篇讨论它们的好文章。

使用两个计时器

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

第二个计时器的间隔为100ms,通常被禁用。它运行您的代码,然后禁用自身

要手动触发,只需启用第二个计时器


这还允许您使用第二个计时器的完全限定命名从另一个窗体触发代码。我在从一个表单呼叫另一个表单时使用此选项。

+1我不知道有些计时器允许设置初始延迟,谢谢。+1这是我忽略了明显延迟的又一种情况。Bevan的解决方案是我的理想解决方案。好的,我也认为Bevan的解决方案是最好的。+1我忽略了这个显而易见的正确方法,谢谢Bevan。