在UI中显示的DispatchTimer跳过间隔秒

时间:2016-08-26 00:36:53

标签: c# wpf

我的DispatchTimer遇到了一些麻烦。每隔一段时间,它就会“跳过”我的UI上显示的第二个或第二个。它始于我的MainViewModel课程,在我的视图中显示倒计时。

    public string Timer
    {
        get { return _timer; }
        set
        {
            _timer = value;
            OnPropertyChanged("Timer");
        }
    }

    public MainViewModel()
    {
        _countDownTimer = new DispatcherTimer();
        _countDownTimer.Tick += async (o, e) => await countdownTimer();
        _countDownTimer.Interval = new TimeSpan(0,0,0,1);
        _countDownTimer.IsEnabled = true;
        _countDownTimer.Start();

    }

这是倒计时到零时调用的方法:

    private async Task countdownTimer()
    {
        TimeSpan TimeRemaining = _next - DateTime.Now;

        string t = TimeRemaining.Hours + "h " + TimeRemaining.Minutes + "m " + TimeRemaining.Seconds + "s";
        this.Timer = t;  // display it on the UI
        int secondsRemaining = (int) TimeRemaining.TotalSeconds;

        if (secondsRemaining == 0)
        {
            // do something that takes a while
            await Task.Run(() => {
                refresIp();
            });
        }
    }

旁注: 变量_next仅提前5分钟。一旦它变为零,它将从当前时间再过5分钟:换句话说,这个倒计时每5分钟发生一次。

我不确定究竟是什么导致了这种“hickup”,但是在这种特殊情况下使用awaitTask可能导致问题与使用线程有关。但是,根据我的理解,您使用awaitasync来处理可能需要一段时间等待结果的事情,而不是使用线程来分割特定任务,因此使用{{{} 1}}和await。无论如何,一些见解会很棒。

0 个答案:

没有答案