WPF中C#中的定时器间隔更改事件

时间:2015-10-26 14:25:32

标签: c# wpf timer dispatchertimer

我想将间隔的值调整为按钮事件。

单击该按钮时,该值增加1,然后减少到

interval想要以秒为单位计算值。

这适用于不调整间隔。

    // Button click event
    private void Start_sorting_Click(object sender, RoutedEventArgs e)
    {
            // The currValue the interval value.
            this.CurrentValue.Content = currValue;
            // timer start
            if (_timer.IsEnabled == false)
            {
                timerStatus = 1;
                _timer.Tick += timer_tick;
                _timer.Interval = new TimeSpan(0, 0, currValue);
                _timer.Start();
            }
     }

    private void timer_tick(object sender, EventArgs e)
    {
        traceInfo = this.sortingInfos[this.sortingInfosIndex++];

        // Animation proceeds for about one second.
        start_animation(traceInfo.Position, traceInfo.TargetPosition);

        if (sortingInfosIndex >= sortingInfos.Count)
        {
            _timer.Stop();
        }
    }
    // Button click event, interval up
    private void repeatAddvalueButton_Click(object sender, RoutedEventArgs e)
    {
        currValue++;
        this.CurrentValue.Content = currValue;
        _timer.Interval.Add( new TimeSpan(0, 0, currValue));
    }

    // Button click event, interval down
    private void repeatRemoveValueButton_Click(object sender, RoutedEventArgs e)
    {
        currValue--;
        this.CurrentValue.Content = currValue;
        _timer.Interval.Subtract(new TimeSpan(0, 0, 1));
    }

1 个答案:

答案 0 :(得分:2)

您假设.Add.Subtract方法修改现有间隔,但实际上它们会返回一个新间隔。由于您并未将其存储在任何位置,因此您只需抛弃加法或减法操作。

修改代码以使用您计算的新间隔:

private void repeatAddvalueButton_Click(object sender, RoutedEventArgs e)
{
    currValue++;
    this.CurrentValue.Content = currValue;
    _timer.Interval = _timer.Interval.Add( new TimeSpan(0, 0, currValue));
}

// Button click event, interval down
private void repeatRemoveValueButton_Click(object sender, RoutedEventArgs e)
{
    currValue--;
    this.CurrentValue.Content = currValue;
    _timer.Interval = _timer.Interval.Subtract(new TimeSpan(0, 0, 1));
}

您可以在上面看到我修改它以将_timer.Interval设置为add或subtract方法的结果。这将改变间隔,因为它不会抛弃操作。

了解哪些类型是可变的(可变的)以及哪些类型是不可变的很重要。 TimeSpan是一个不可变对象,因此对它的操作会返回新的TimeSpan个对象,它不会修改现有的对象。