public ProgressBarViewModel() { this.state = InternalProgressBarState.Disabled; this.lockObject = new object(); this.timer = new DispatcherTimer(); this.timer.Tick += this.OnTimer; }
private void ChangeState(bool enable) { lock (this.lockObject) { switch (this.state) { case InternalProgressBarState.Disabled: if (enable) { this.state = InternalProgressBarState.EnablePending; // start the enable delay timer this.timer.Interval = new TimeSpan(0, 0, ENABLEDELAY); this.timer.Start(); } break; case InternalProgressBarState.EnablePending: if (!enable) { this.state = InternalProgressBarState.Disabled; // stop the enable delay timer this.timer.Stop(); } break; case InternalProgressBarState.Enabled: if (!enable) { this.state = InternalProgressBarState.DisablePending; } break; case InternalProgressBarState.OkToDisable: if (!enable) { this.state = InternalProgressBarState.Disabled; } break; case InternalProgressBarState.DisablePending: if (enable) { this.state = InternalProgressBarState.Enabled; } break; } } this.RaisePropertyChanged("ProgressBarState"); }
private void OnTimer(object o, EventArgs sender) { lock (this.lockObject) { switch (this.state) { case InternalProgressBarState.EnablePending: // Stop the enable delay timer this.state = InternalProgressBarState.Enabled; this.timer.Stop(); // Start the disable delay timer this.timer.Interval = new TimeSpan(0, 0, DISABLEDELAY); this.timer.Start(); break; case InternalProgressBarState.Enabled: this.state = InternalProgressBarState.OkToDisable; this.timer.Stop(); break; case InternalProgressBarState.DisablePending: this.state = InternalProgressBarState.Disabled; this.timer.Stop(); break; default: Debug.Assert(true, "Progress bar state is incorrect on timer tick: " + this.state); this.state = InternalProgressBarState.Disabled; this.timer.Stop(); break; } } this.RaisePropertyChanged("ProgressBarState"); }