C# ';iEnabled';和';启动/停止';调度员的名字?

C# ';iEnabled';和';启动/停止';调度员的名字?,c#,wpf,C#,Wpf,我认为IsEnabled=false/true与类System.Windows.Threading.Dispatchermer的停止/启动方法相同 我说得对吗 [编辑] Start():以全间隔倒计时开始计时器。 IsEnabled=false:暂停计时器,间隔倒计时保持不变。 IsEnabled=true:恢复计时器并继续上一次使用的间隔倒计时。 Stop():停止计时器,间隔倒计时是否会重置?考虑到Start/Stop切换IsEnabled属性,您的假设已接近 启动/停止不同于重置的间隔,只

我认为IsEnabled=false/true与类System.Windows.Threading.Dispatchermer的停止/启动方法相同 我说得对吗

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

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

启动/停止
不同于重置的
间隔
,只要切换
已启用
将不会重置
间隔

发件人:

当 计时器启动后停止计时器

当 计时器停止后,启动计时器

开始设置已启用为true

Start重置计时器间隔

编辑: 我所说的重置间隔并不是interval属性本身,而是确定触发下一个tick事件的时间间隔

例如,如果你有一个1000毫秒的间隔,并且你在需要运行250毫秒时停止/禁用它(它运行了750毫秒),这将取决于你如何再次启动它

  • 如果使用
    start()
    启动,则传递的间隔将重置为0,并在引发
    勾选事件之前1000毫秒
  • 如果您使用
    IsEnabled=true重新启用它,则它将从当前位置继续,并且
    勾选事件将在250ms后引发

我希望这能为您澄清这一点。

Dispatchermer.IsEnabled的实现

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

如果时间间隔被重置,会发生什么情况?目前,我认为在调用Start/Stop时,间隔值(int)不会改变。不是间隔值本身,而是背景间隔。我已经更新了我的答案来回答这个问题。也许文档中说Start会重置计时器,但是如果您一直调用
Start
,则不会重置超时。你需要停止/启动。我刚刚测试了这个,发现启动本身不会重置计时器。您必须先停止,然后再开始让它将计时器重置为完整间隔。这是不正确的。Start()、Stop()和IsEnabled=true和IsEnabled=false都执行相同的操作。我刚刚创建了一个示例应用程序,在该应用程序中,我不断地将IsEnabled设置为false,然后在计时器运行时返回true-计时器从未完成。这是因为无论调用IsEnabled=false还是Stop(),都会在源代码下重置间隔: