Hallo,
für eine Trink-Erinnerer-Anwendung verwende ich eine Klasse DrinkTimer
, die intern einen System.Windows.Threading.DispatcherTimer timer
verwendet und INotifyPropertyChanged
implementiert.
/// <summary>
/// Gets or sets a value indicating whether this timer is currently running.
/// </summary>
/// <value><c>true</c> if this timer is running; otherwise, <c>false</c>.</value>
public bool IsEnabled
{
get
{
return timer.IsEnabled;
}
set
{
if (timer.IsEnabled != value)
{
timer.IsEnabled = value;
OnPropertyChanged("IsEnabled");
}
}
}
Jetzt frage ich mich, was der "korrekte" (?) Weg ist — timer.IsEnabled = true
oder timer.Start()
? Wenn ich die freie Wahl hätte, würde ich timer.Start()
verwenden, was ich hier ja auch tun könnte (Fallunterscheidung von value
). Das wäre allerdings eine Herangehensweise à la von hinten durch die Brust ins Auge.
Daher meine Frage: Gibt es irgendwelche Nachteile oder Nebenwirkungen, wenn ich den DispatcherTimer
per timer.IsEnabled = true
starte?
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo m0rius,
Gibt es irgendwelche Nachteile oder Nebenwirkungen, wenn ich den
DispatcherTimer
pertimer.IsEnabled = true
starte?
Warum sollte es?
Setting IsEnabled to true when the timer is stopped starts the timer.
Und andersherum:
Calling Start sets IsEnabled to true.
herbivore
Hallo herbivore,
der gesunde Menschenverstand sagt das ja auch 😃. Nur frage ich mich, weshalb dann überhaupt die redundanten Methoden Start()
und Stop()
existieren. Diese implizieren IMO, dass es einen Unterschied in der Verwendung gibt. Aus ästhetischen Gründen, weil sich Code dadurch besser liest?
Wie dem auch sei - danke.
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hallo m0rius,
Wenn ich die freie Wahl hätte ...
es gibt die beiden Wege, damit man die freie Wahl hat. Wie du gesehen hast, gibt es Fälle, in denen man mit IsEnabled deutlich besser fährt. Wenn man dagegen den Timer einfach nur an einer Stelle erzeugt und starten will, dann fährt man mit Start () besser.
herbivore
Hallo m0rius,
ich schließe mich herbivore an: Nimm das, was dir am sympathischsten bzw. am lesbarsten vorkommt.
Nichts desto trotz hilft auch immer ein Blick in den Reflector (über die Eleganz dieses Code lässt sich streiten...):
public bool IsEnabled
{
get
{
return this._isEnabled;
}
set
{
lock (this._instanceLock)
{
if (!value && this._isEnabled)
{
this.Stop();
}
else if (value && !this._isEnabled)
{
this.Start();
}
}
}
}
//...
public void Start()
{
lock (this._instanceLock)
{
if (!this._isEnabled)
{
this._isEnabled = true;
this.Restart();
}
}
}
Fazit: Es kommt unterm Strich gesehen auf's gleiche raus.