假设我有一个配置了10秒(10k ms)间隔的Windows窗体计时器:
myTimer.Interval = 10000;
我想启动它并立即启动Tick
事件:
myTimer.Start();
myTimer_Tick(null, null);
最后一行有效,但有更好或更合适的方法吗?
答案 0 :(得分:32)
我唯一不同的做法是将实际的Tick功能移动到一个单独的方法中,这样您就不必直接调用该事件。
myTimer.Start();
ProcessTick();
private void MyTimer_Tick(...)
{
ProcessTick();
}
private void ProcessTick()
{
...
}
首先,我这样做是因为事件的直接调用在我看来是Code Smell - 通常它表示spagetti结构代码。
答案 1 :(得分:9)
.NET中至少有4个不同的“计时器”。使用System.Threading,您可以获得一个专门允许您设置初始延迟的文件。
var Timer = new Timer(Timer_Elapsed, null, 0, 10000);
使用不同的计时器有好处,here是一篇很好的讨论它们的文章。
答案 2 :(得分:2)
您可以将间隔设置为1(0可能意味着无限超时),并在第一次打勾时将其设置为10k。
计时器将“很快”打勾(取决于您使用的计时器类型,请参阅this),但执行操作不会像解决方案那样继续执行点击处理程序。
(我想你知道Bevan的解决方案)。
答案 3 :(得分:0)
使用两个计时器。
第一个具有您要使用的正常间隔并且只启用第二个计时器。
第二个计时器的间隔为 100 毫秒,通常被禁用。它会运行您的代码,然后自行禁用。
要手动触发,只需启用第二个计时器。
这还允许您使用第二个计时器的完整限定命名从另一个表单触发代码。我在从一种形式调用另一种形式时使用它。