2

今日、興味深いバグレポートを受け取りました。

Tick が Stop() メソッド呼び出しを含む EventHandler を呼び出す DispatcherTimer があります。これにより、開発で使用するプラットフォーム (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();
    }
}

よろしくお願いします!

4

1 に答える 1

0

理解した。タイマー自体のパブリック インスタンスではなく、OnTimerEvent の送信者を変更する必要があったことがわかりました。

于 2011-07-12T18:52:42.450 に答える