DispatcherTimer 在 C# WPF 中慢慢变快
本文关键字:慢慢 WPF DispatcherTimer | 更新日期: 2023-09-27 18:36:43
似乎
导致问题的调度程序计时器是openTimer
和closeTimer
。第一次启用它们时,它们以正确的速度工作,但是之后每当计时器从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;
}
}
可能是什么原因造成的?
ToggleCharmsBar() 方法是否再次被调用?检查以确保没有分配额外的计时器。这可能是出现得更快的原因。实际上,它只是一个重复的计时器,处于不同的时钟周期。