繁体   English   中英

计时器为零后重新启用按钮

[英]Re-enabled the button after timer is zero

需要您的按钮帮助。 定时器归零后,它不会重新启用。 但是,在我单击 UI 或按钮并且计时器为零后,它会重新启用。 有任何想法吗? 谢谢。

这是命令:

        RelayCommand _testCommand;
        public ICommand TestCommand
        {
            get
            {
                if (_testCommand == null)
                {
                    _testCommand = new RelayCommand(
                        (object o) =>
                        {
                            IsEnabled = false;
                            StartTimer(5);
                        }, (object j)=> IsEnabled );
                }
                return _testCommand;
            }
            set { _testCommand = null; }
        }

这是财产:

    bool _isEnabled = true;
    bool IsEnabled
    {
        get { return _isEnabled; }
        set
        {
            _isEnabled = value;
            OnPropertyChanged();

        }
    }

方法:

    private Timer timer1;
    private int counter;
    private void StartTimer(int cnt)
    {
        counter = cnt;
        timer1 = new Timer();
        timer1.Elapsed += OnTimedEvent;
        timer1.Interval = 1000;
        timer1.Start();
    }

    private void OnTimedEvent(object sender, ElapsedEventArgs e)
    {
        Console.WriteLine(counter);
        counter--;
        if (counter < 0)
        {
            timer1.Stop();
            IsEnabled = true;
        }            
    }

好的。 我想我回答了我自己的问题。 如果我错了,请纠正我,但有两件事正在发生。 一种是 ElapsedEventArgs 在不同的线程中执行。 二是按钮(UI)不会自动更新。 我必须调用CommandManager.InvalidateRequerySuggested(); 强制更新。 OnTimedEvent方法更新为:

    private void OnTimedEvent(object sender, ElapsedEventArgs e)
    {
        Console.WriteLine(Thread.CurrentThread.ManagedThreadId + " " + counter);
        counter--;
        if (counter < 0)
        {
            Application.Current.Dispatcher.Invoke(() =>
            {
                IsEnabled = true;
                timer1.Stop();
                CommandManager.InvalidateRequerySuggested();
                Console.WriteLine("The caller id now is " + Thread.CurrentThread.ManagedThreadId);
            });
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM