DispatcherTimers, которые, кажется, вызывают проблему, это 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;
}
}
Что может быть причиной этого?