对于轨迹栏和数字上/下(以及其他内容),似乎每当值更改时,在更改之间的延迟非常短时触发事件。
这对我来说是一个问题,因为无论何时值发生变化,我都会执行一些需要花费大量时间来处理的函数(例如,大约100-200毫秒,具体取决于输入的大小)
我注意到当我使用鼠标滚轮增加/减少该值时,它会记录4个更改事件(打印“已更改!”4次到调试控制台),因此这些功能执行4次。这可能是我对鼠标滚轮的设置。
即使我手动点击轨迹栏以使其“大幅增加”,它也会注册2个更改事件。
我希望函数在值更改时运行,但不是单个鼠标滚轮滚动触发4个调用的点。我只需要最近的价值。
解决方案是强制用户手动按下按钮来执行命令,但我希望进行某种“实时”更新。
答案 0 :(得分:2)
让数字控件的事件设置一个标志。添加一个Timer
控件,每500毫秒运行一次,检查该标志,如果设置,则调用实际方法并清除该标志。如果要确保处理最后一个值集,请先清除标志。
答案 1 :(得分:0)
扩展所有交易的Jon建议..
使用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以获得最佳效果。