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

时间:2010-07-02 04:54:05

标签: c# wpf

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

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

2 个答案:

答案 0 :(得分:41)

考虑到Start/Stop切换IsEnabled属性,您的假设很接近。

Start/Stop因重置Interval而有所不同,因为切换IsEnabled不会重置Interval

来自MSDN

  

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

     

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

     

开始将IsEnabled设置为true。

     

开始重置计时器间隔。

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

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

  • 如果您使用Start()启动它,则传递的时间间隔将重置为0,并且会在Tick事件被提升之前的1000毫秒。
  • 如果您使用IsEnabled = true重新启用它,那么它将从当前位置继续,Tick事件将在250毫秒内提升。

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

答案 1 :(得分:5)

DispatcherTimer.IsEnabled

的实施
    public bool IsEnabled
    {
       get
       {
           return _isEnabled;
       }
       set
       {
           lock (_instanceLock)
           {
               if (!value && _isEnabled)
               {
                   Stop();
               }
               else
               {
                   if (!value || _isEnabled)
                       return;
                   Start();
               }
           }
       }
    }