DispatcherTimer在Win 2k8 SP2中的Stop()之后保持激活

时间:2011-07-08 18:46:38

标签: c# .net-3.5 windows-server-2008 dispatchertimer

我今天收到了一个有趣的错误报告。

我有一个DispatcherTimer,其Tick调用包含Stop()方法调用的EventHandler。这会停止我们在开发中使用的平台上的计时器(Windows XP SP3和Windows 7),但在Windows Server 2008 SP2计算机上运行时,计时器似乎不会停止。

这是一个.NET 3.5项目。

我想知道这是Win 2k8中System.Windows.Threading中的已知错误,还是我的代码中出错了。

代码的相关部分如下:

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 :(得分:0)

想出来。结果我不得不修改OnTimerEvent的发送者,而不是定时器本身的公共实例。