DispatcherTimer 在 C# WPF 中慢慢变快

本文关键字:慢慢 WPF DispatcherTimer | 更新日期: 2023-09-27 18:36:43

似乎

导致问题的调度程序计时器是openTimercloseTimer。第一次启用它们时,它们以正确的速度工作,但是之后每当计时器从ToggleCharmsBar()内触发时,速度就会不断增加。

DispatcherTimer openTimer = new DispatcherTimer();
DispatcherTimer closeTimer = new DispatcherTimer();
private void ToggleCharmsBar()
{
    buttonA.IsEnabled = false;
    if (buttonA.Visibility == Visibility.Visible)
    {
        // Close charms bar
        buttonA.Opacity = 1;
        closeTimer.Tick += closeTimer_Tick;
        closeTimer.Interval = TimeSpan.FromMilliseconds(5);
        closeTimer.IsEnabled = true;
    }
    else
    {
        // Open charms bar
        buttonA.Visibility = Visibility.Visible;
        buttonA.Opacity = 0;
        openTimer.Tick += openTimer_Tick;
        openTimer.Interval = TimeSpan.FromMilliseconds(5);
        openTimer.IsEnabled = true;
    }
}
private void closeTimer_Tick(object sender, EventArgs e)
{
    // This timer speeds up with every call to ToggleCharmsBar()
    if (buttonA.Opacity < 0.02)
    {
        buttonA.Opacity = 0;
        buttonA.Visibility = Visibility.Hidden;
        buttonA.IsEnabled = false;
        closeTimer.IsEnabled = false;
    }
    else
    {
        buttonA.Opacity -= 0.02;
    }
}
private void openTimer_Tick(object sender, EventArgs e)
{
    // This timer also speeds up with every call to ToggleCharmsBar()
    if (buttonA.Opacity > 0.98)
    {
        buttonA.Visibility = Visibility.Visible;
        buttonA.Opacity = 1;
        buttonA.IsEnabled = true;
        openTimer.IsEnabled = false;
    }
    else
    {
        buttonA.Opacity += 0.02;
    }
}

可能是什么原因造成的?

DispatcherTimer 在 C# WPF 中慢慢变快

ToggleCharmsBar() 方法是否再次被调用?检查以确保没有分配额外的计时器。这可能是出现得更快的原因。实际上,它只是一个重复的计时器,处于不同的时钟周期。