WPF C# – 定时器倒计时

如何在我用WPF C#编写的代码中实现以下内容?

我有一个ElementFlow控件,我在其中实现了一个SelectionChanged事件,当控件的项目选择发生变化时(根据定义)触发特定事件。

我希望它做的是:

  1. 启动计时器
  2. 如果计时器达到2秒,则启动一个MessageBox说(例如,“Hi there”)
  3. 如果在计时器达到2秒之前选择发生变化,则应重置计时器并重新开始计时。

这是为了确保只有在2秒内选择没有改变时才会启动冗长的操作,但我不熟悉WPF的DispatcherTimerfunction,因为我更了解Windows窗体的正常计时器。

谢谢,

S.

我已经想出了完整的代码:

DispatcherTimer _timer; public MainWindow() { _myTimer = new DispatcherTimer(); _myTimer.Tick += MyTimerTick; _myTimer.Interval = new TimeSpan(0,0,0,1); } private void ElementFlowSelectionChanged(object sender, SelectionChangedEventArgs e) { _counter = 0; _myTimer.Stop(); _myTimer.Interval = new TimeSpan(0, 0, 0, 1); _myTimer.Start(); } private int _counter; public int Counter { get { return _counter; } set { _counter = value; OnPropertyChanged("Counter"); } } private void MyTimerTick(object sender, EventArgs e) { Counter++; if (Counter == 2) { _myTimer.Stop(); MessageBox.Show(“Reached the 2 second countdown”); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler e = PropertyChanged; if (e != null) { e(this, new PropertyChangedEventArgs(propertyName)); } } 

试试这个:

 private int timerTickCount = 0; private bool hasSelectionChanged = false; private DispatcherTimer timer; 

在您的构造函数或相关方法中:

 timer = new DispatcherTimer(); timer.Interval = new TimeSpan(0, 0, 1); // will 'tick' once every second timer.Tick += new EventHandler(Timer_Tick); timer.Start(); 

然后是一个事件处理程序:

 private void Timer_Tick(object sender, EventArgs e) { DispatcherTimer timer = (DispatcherTimer)sender; if (++timerTickCount == 2) { if (hasSelectionChanged) timer.Stop(); else MessageBox.Show("Hi there"); } } 

最后,为了使其工作,您只需在根据SelectionChanged事件更改选择时设置hasSelectionChanged变量。

看这里是如何使用DispatherTimer的代码,你可以在其中添加自己的逻辑。 这取决于你..

  private void ListBox_SelectionChanged_1(object sender, SelectionChangedEventArgs e) { DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(2000); timer.Tick += timer_Tick; timer.Start(); } void timer_Tick(object sender, object e) { // show your message here.. } 

要使用DispatcherTimer:

  private DispatcherTimer _timer; public void StartTimer() { if (_timer == null) { _timer = new DispatcherTimer(); _timer.Tick += _timer_Tick; } _timer.Interval = TimeSpan.FromSeconds(2); _timer.Start(); } void _timer_Tick(object sender, EventArgs e) { MessageBox.Show("Hi there"); _timer.Stop(); } void SelectionChangedEvent() { StartTimer(); }