DispatcherTimer продолжает стрелять после остановки () в Win 2k8 SP2 - PullRequest
2 голосов
/ 08 июля 2011

Сегодня я получил интересный отчет об ошибке.

У меня есть DispatcherTimer, Tick которого вызывает EventHandler, который содержит вызов метода Stop ().Это останавливает таймер на платформах, которые мы используем в разработке (Windows XP SP3 и Windows 7), но таймер не останавливается при запуске на компьютере с Windows Server 2008 с пакетом обновления 2 (SP2).

Это .NET 3.5project.

Мне интересно, является ли это известной ошибкой в ​​System.Windows.Threading в Win 2k8 или я что-то не так делаю в своем коде.

Соответствующие части коданиже:

public DispatcherTimer UserDelayTimer;

private void _HierTreeControlWPF_Loaded(object sender, RoutedEventArgs e)
{
    UserDelayTimer = new DispatcherTimer();
    UserDelayTimer.Interval = new TimeSpan(0, 0, 0, 0, 500);  //500 ms
    UserDelayTimer.Tick += new EventHandler(OnTimerEvent);
    UserDelayTimer.Start();
}

/// <summary>
/// Timer to run update after the user has stopped making selections in the hierarchy view.
/// </summary>
/// <param name="source"></param>
/// <param name="e"></param>
void OnTimerEvent(object sender, EventArgs e)
{
    if (HierTreeAfterCheck_Event != null && !HierTreeCheckEvent_Suppressed)
        HierTreeAfterCheck_Event();
    UserDelayTimer.Stop();
}

//This method is run whenever the mouse moves or makes a selection in the hierarchy tree.
//The idea is that HierTreeAfterCheck_Event() will only run after the user has stopped making
//selections for a certain amount of time.
public void ResetUserDelayTimer(object sender, MouseButtonEventArgs e)
{
    if (UserDelayTimer.IsEnabled) //if the timer is running, restart it to buy more time.
    {
        UserDelayTimer.Stop();
        UserDelayTimer.Start();
    }
}

Большое спасибо заранее!

1 Ответ

0 голосов
/ 12 июля 2011

Разобрался. Оказывается, мне пришлось изменить отправителя OnTimerEvent вместо публичного экземпляра самого таймера.

...