首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF C# -计时器倒计时

WPF C# -计时器倒计时
EN

Stack Overflow用户
提问于 2013-08-14 11:30:47
回答 4查看 12.6K关注 0票数 1

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

我有一个ElementFlow控件,在该控件中,我实现了一个SelectionChanged事件,该事件(根据定义)在控件的项选择发生更改时触发特定事件。

我想做的是:

  1. 启动计时器
  2. 如果计时器达到2秒,那么启动一个MessageBox,例如“嗨”
  3. 如果选择在计时器达到2秒之前更改,则应重置定时器并重新启动。

这是为了确保只有在所选内容在2秒内未发生更改时才启动冗长的操作,但我不熟悉WPF的DispatcherTimer功能,因为当涉及到Windows的正常计时器时,我更了解它。

谢谢,

S.

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-08-14 12:10:49

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

代码语言:javascript
复制
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));
}
}
票数 4
EN

Stack Overflow用户

发布于 2013-08-14 11:47:21

试试这个:

代码语言:javascript
复制
private int timerTickCount = 0;
private bool hasSelectionChanged = false;
private DispatcherTimer timer;

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

代码语言:javascript
复制
timer = new DispatcherTimer();
timer.Interval = new TimeSpan(0, 0, 1); // will 'tick' once every second
timer.Tick += new EventHandler(Timer_Tick);
timer.Start();

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

代码语言:javascript
复制
private void Timer_Tick(object sender, EventArgs e)
{
    DispatcherTimer timer = (DispatcherTimer)sender;
    if (++timerTickCount == 2)
    {
        if (hasSelectionChanged) timer.Stop();
        else MessageBox.Show("Hi there");
    }
}

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

票数 4
EN

Stack Overflow用户

发布于 2013-08-14 11:49:17

下面是如何使用DispatherTimer的代码,您可以在其中添加自己的逻辑。那取决于你..。

代码语言:javascript
复制
 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..
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18230552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档