DispatcherTimer的'IsEnabled'和'Start/Stop'有什么不同?

Nam*_* VU 29 c# wpf

我认为IsEnabled = false/true与System.Windows.Threading.DispatcherTimer类的Stop/Start方法完全相同我说对了吗?

[编辑]开始():以完整间隔倒计时开始计时器.IsEnabled = false:暂停计时器,间隔倒计时仍然存在.IsEnabled = true:恢复计时器并继续使用上次使用的间隔倒计时.停止():停止计时器,间隔倒计时会重置吗?

Ala*_*tts 42

考虑到Start/Stop切换IsEnabled财产,你的假设很接近.

Start/StopInterval重置而不同,只是切换IsEnabled不会重置Interval.

来自MSDN:

启动计时器时将IsEnabled设置为false会停止计时器.

当计时器停止时将IsEnabled设置为true将启动计时器.

开始将IsEnabled设置为true.

开始重置计时器间隔.

编辑:重置间隔的意思不是Interval属性本身,而是确定触发下一个tick事件的时间长度的背景间隔.

例如.如果你有一个1000毫秒的间隔,你停止/禁用它,如果运行250毫秒(它运行750毫秒),这是结果取决于你如何再次启动它.

  • 如果你启动它Start(),那么传递的间隔将重置为0,它将在Tick事件引发之前1000ms .
  • 如果你重新启用它,IsEnabled = true那么它将从它的当前位置继续,并且Tick事件将在250ms内提升.

我希望这能为你澄清一下.

  • 也许文档说启动重置计时器,但如果你只是一直调用"启动",超时将不会被重置.你需要停止/开始. (8认同)
  • 我刚刚对此进行了测试,发现Start by本身不会重置计时器.你必须停止然后开始让它将计时器重置为完整的间隔. (2认同)

ant*_*ord 5

DispatcherTimer.IsEnabled的实现

    public bool IsEnabled
    {
       get
       {
           return _isEnabled;
       }
       set
       {
           lock (_instanceLock)
           {
               if (!value && _isEnabled)
               {
                   Stop();
               }
               else
               {
                   if (!value || _isEnabled)
                       return;
                   Start();
               }
           }
       }
    }
Run Code Online (Sandbox Code Playgroud)