C# 如何检测是否按下向下箭头键一段时间?

C# 如何检测是否按下向下箭头键一段时间?,c#,wpf,C#,Wpf,我有一个问题,我不知道如何解决。。。 我有一个列表框,其中可能有很多项 当用户选择一个项目时,我进行异步调用,获取一些数据并填充屏幕。 用户可以按向下箭头键或向上箭头键在项目之间导航,问题是当用户按住向下箭头键时,选择快速更改,我的应用程序遇到问题…是否有一种干净的方法来检测用户按住向下键一段时间,暂停更新视图,只有在他发布后才更新 很抱歉,如果我没有解释清楚,如果控件是可聚焦的,您可以覆盖 所以在本例中,这意味着本质上创建listbox的子类,然后重写OnKeyDown函数。你可以这样理解,但

我有一个问题,我不知道如何解决。。。 我有一个列表框,其中可能有很多项

当用户选择一个项目时,我进行异步调用,获取一些数据并填充屏幕。 用户可以按向下箭头键或向上箭头键在项目之间导航,问题是当用户按住向下箭头键时,选择快速更改,我的应用程序遇到问题…是否有一种干净的方法来检测用户按住向下键一段时间,暂停更新视图,只有在他发布后才更新


很抱歉,如果我没有解释清楚,如果控件是可聚焦的,您可以覆盖

所以在本例中,这意味着本质上创建listbox的子类,然后重写OnKeyDown函数。你可以这样理解,但这会让事情变得更加混乱

或者,您可以使用查询键状态


不过,我觉得你应该预先加载数据。列表框使用一个足够智能的列表框,不会显示不需要的信息。

是否尝试异步

  • 。。。更新填充列表框的集合,或
  • 。。。是否根据列表框中当前选定的项目更新单独的视图
  • 我猜是#2,当启动大量异步调用来更新单独视图时,会遇到问题。正如@Ramhound所指出的,按住按钮和快速点击同一按钮(或者作为韩国亲战玩家只需点击鼠标)快速改变选择之间没有区别。要修复这两个问题,可以执行以下操作:

  • 设置一个计时器,在选择更改时重置。仅在异步查询超时后启动它。这将过滤掉非常快速的选择更改
  • 确保一次只有一个正在进行的查询,因此在开始新的异步调用之前,请取消并清理上一个查询

  • 通过这种方式,用户可以对所选内容执行任何操作,您仍然只能在用户实际选择了某个内容后进行更新。调整时间以确保用户界面仍然整洁:)

    我已经编辑了你的标题。请看“,”其中的共识是“不,他们不应该”。你的问题不是按键。您的问题是如何处理所选项目中的更改。发布一些代码来说明这一点。按住键盘按钮和多次按下按钮的唯一区别是停止信号。这意味着每次检查键盘缓冲区时,缓冲区中都会有相同的键,这意味着如果用户快速按下按钮,代码的行为应该完全相同。