1

对于轨迹栏和数字向上/向下(除其他外),每当值更改时触发的事件似乎在更改之间具有非常短的延迟。

这对我来说是个问题,因为每当值发生变化时,我都会执行一些需要相当长的时间来处理的函数(例如,大约 100-200 毫秒,具体取决于输入的大小)

我注意到,当我使用鼠标滚轮增加/减少值时,它会注册 4 个更改事件(打印“更改!” 4 次调试控制台),因此函数执行 4 次。这可能是我的鼠标滚轮的设置。

即使我手动单击轨迹栏以使其“大幅增加”,它也会注册 2 个更改事件。

我希望函数在值更改时运行,但不希望单个鼠标滚轮滚动触发 4 个调用。我只需要最新的值。

一种解决方案是强制用户手动按下按钮来执行命令,但我想要某种“实时”更新。

4

2 回答 2

2

让数字控件的事件设置一个标志。添加一个Timer控件,每 500 毫秒运行一次,它检查标志,如果设置,则调用实际方法并清除标志。如果要确保处理最后一个值集,请先清除该标志。

于 2012-07-27T21:48:15.687 回答
0

扩展所有行业的乔恩建议..

而不是一个简单的标志,使用DateTime?. 当事件触发时,设置eventLastTriggered = DateTime.Now. 然后在您的计时器的 Tick 处理程序中执行此操作

private void timer_Tick(object sender, EventArgs e)
{
    if (eventLastTriggered.HasValue
        && (DateTime.Now - eventLastTriggered.Value) >= UpdateDelay)
    {
        eventLastTriggered = null; // reset it so we don't update again
        Update();
    }
}

static readonly TimeSpan UpdateDelay = TimeSpan.FromMilliseconds(whatever);

您将获得持续的更新延迟,但不会收到更新垃圾邮件。您可以调整 UpdateDelay 以获得最佳结果。

于 2012-07-27T22:17:00.707 回答