如果在System.Windows.Forms.Timer类上调用Start()两次会发生什么?

8
假设我有一个1000毫秒间隔的 System.Windows.Forms.Timer。如果我调用 Timer.Start() 方法,并且在500毫秒后再次调用 Timer.Start(),会发生什么?第二个 Start 调用会重置间隔吗?是否会产生任何副作用?

3
好的,试一下看会发生什么。 - Liviu Mandras
感谢您提出这个问题。 - Arun Prasad
4个回答

12
计时器已经启动,因此第二次调用不会影响它。
无论如何,这很容易测试。

1
你可以把“easy”加粗显示 :) - Liviu Mandras
@Drake - 比如说呢?调用 Start 就像将 Enabled 设置为 true - Oded
@Oded:Saeed 给负评了,他误解了 Reflector 的输出。 ;) - Bobby
@Bobby - 是的,他也意识到了自己的错误 :) - Oded
@Oded:是的,我只是不确定你是否看到了他的评论/回答。 :) - Bobby

2

它不会影响任何东西...

看这段代码

  class TimerTest
{
   static int i = 0;
    static void Tick(object sender, EventArgs e)
    {

        Console.WriteLine(i);
        i++;
    }
    static void Main()
    {
        // interval = 500ms
        Timer tmr = new Timer();
        tmr.Interval = 500;
        tmr.Elapsed += Tick;
        tmr.Start();
        Console.ReadLine();
        tmr.Start();
        Console.ReadLine();
        tmr.Stop();
        Console.ReadLine();
        tmr.Start();
        Console.ReadLine();
        tmr.Dispose(); // This both stops the timer and cleans up.
    }
}

一旦开始,如果按下回车键,则第二次启动不会影响任何内容。


2

Start()函数仅将Enabled属性设置为true。如果Enabled属性已经被设置为true,它会再次将其设置为true并继续执行。

同样地,Stop()函数将Enabled属性设置为false。


0
那些回答 Start() "只是将 Enabled 属性设置为 true" 的人忽略了 Enabled 是一个属性,而所有的启动逻辑都在 set 访问器中。因此,这并不是“只是”。 查看参考源代码可以清楚地看到,如果您将 Enabled 设置为与其已有的值相同,则什么也不会发生,它是一个 nop。

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