【问题标题】:What is the different between 'IsEnabled' and 'Start/Stop' of DispatcherTimer?DispatcherTimer 的“IsEnabled”和“Start/Stop”有什么区别?
【发布时间】:2021-05-13 03:22:09
【问题描述】:

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

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

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

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

    Start/Stop 的不同之处在于 Interval 被重置,而只是切换 IsEnabled 不会重置 Interval

    来自MSDN

    将 IsEnabled 设置为 false 时 timer is started 停止计时器。

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

    开始将 IsEnabled 设置为 true。

    开始重置计时器间隔。

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

    例如。如果您有 1000 毫秒的间隔并且您在 250 毫秒的运行时间(它运行了 750 毫秒)时停止/禁用它,这取决于您再次启动它的方式。

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

    我希望这可以为您澄清。

    【讨论】:

    • 如果重置间隔会发生什么情况?目前,我认为在调用 Start/Stop 时,Interval 值(int)不会改变。
    • 不是区间值本身,而是背景区间。我已经更新了我的答案来回答这个问题。
    • 也许文档说 Start 会重置计时器,但如果您一直调用 Start,则不会重置超时。您需要停止/启动。
    • 我刚刚对此进行了测试,发现 Start 本身不会重置计时器。您必须停止然后开始让它将计时器重置为完整间隔。
    • 这是不正确的。 Start()、Stop() 和 IsEnabled = true 和 IsEnabled = false 都做同样的事情。我刚刚创建了一个示例应用程序,在其中我不断将 IsEnabled 设置为 false,然后在计时器运行时返回 true - 计时器从未完成。这是因为无论您调用 IsEnabled = false 还是 Stop(),间隔都会在后台重置
    【解决方案2】:

    DispatcherTimer.IsEnabled 的实现

        public bool IsEnabled
        {
           get
           {
               return _isEnabled;
           }
           set
           {
               lock (_instanceLock)
               {
                   if (!value && _isEnabled)
                   {
                       Stop();
                   }
                   else
                   {
                       if (!value || _isEnabled)
                           return;
                       Start();
                   }
               }
           }
        }
    
    猜你喜欢
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多