I think that IsEnabled = false/true is equally the same with Stop/Start method of class System.Windows.Threading.DispatcherTimer Am I right?
[EDIT] Start() : begin timer with a full interval countdown. IsEnabled = false : pause the timer, the interval countdown remains. IsEnabled = true : resume the timer & continue with the last used interval countdown. Stop() : 开发者_高级运维stop the timer, will the interval countdown reset?
Considering that Start/Stop
toggles the IsEnabled
property, your assumption is close.
Start/Stop
differs as the Interval
is reset, where as just toggling the IsEnabled
will not reset the Interval
.
From MSDN:
Setting IsEnabled to false when the timer is started stops the timer.
Setting IsEnabled to true when the timer is stopped starts the timer.
Start sets IsEnabled to true.
Start resets the timer Interval.
EDIT: What I mean by the interval being reset is not the Interval property itself, but the background interval that determines how long until the next tick event is fired.
Eg. If you have an interval of 1000ms and you stop/disable it if with 250ms to run (it's run for 750ms), this is the result depending on how you start it again.
- If you start it with
Start()
, then the passed interval will be reset back to 0 and it will be 1000ms before theTick
event is raised. - If you re-enable it with
IsEnabled = true
then it will continue from it's current location and theTick
event will be raised in 250ms.
I hope this clarifies it for you.
Implementation of DispatcherTimer.IsEnabled
public bool IsEnabled
{
get
{
return _isEnabled;
}
set
{
lock (_instanceLock)
{
if (!value && _isEnabled)
{
Stop();
}
else
{
if (!value || _isEnabled)
return;
Start();
}
}
}
}
精彩评论