我正在开发一个应用程序,用户可以在其中看到某些东西,并且必须通过单击键盘上的某个键来作出反应。反应时间至关重要,越精确越好。WPF keyDown响应时间精度
我写的示例应用程序INF WPF只有几行代码来测试默认设置:
namespace Test
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private Stopwatch sw;
public MainWindow()
{
InitializeComponent();
sw = new Stopwatch();
sw.Start();
this.KeyDown += OnKeyDown;
}
private void OnKeyDown(object sender, KeyEventArgs keyEventArgs)
{
sw.Stop();
lbl.Content = sw.ElapsedMilliseconds;
sw.Restart();
}
}
}
lbl
是只是简单的标签。
奇怪的是,当我按下例如空格并按住它时,lbl
的值在30-33范围内变化。
所以我不能预测什么是响应的准确性?例如1毫秒的精度是不可能的?用户在同一时间点击空间(例如1毫秒的精确度)我可以在事件处理程序中处理它吗?
的主要问题是:
让我们说我有一个钥匙的事件处理程序:
Test_KeyDown(object sender, KeyEventArgs keyEventArgs)
{
time = stopwatch.elapsed();
stopwatch.Restart();
}
什么是“时间”,可以发生可能的最低值?我能确定时间值精确到1毫秒吗? 在这种方法中,我启动秒表,但之后必须等待 - 多久 - GUI才能刷新?
不知道你要在那里测量什么,也不知道你是如何做到的。 'KeyDown'在按键关闭时不会持续产生(我猜这会是'KeyPress'),所以按住空格键不应该多次更新标签,是吗?如果您的意思是在显示窗口之前按住空格键,则您将在构造函数之间对代码进行基准测试,直至窗口最终处于活动状态,然后泵事件。 – jods
据我所知调度事件一样快,因为它可以和作品几乎相同的方式任何其他Windows应用程序做:关键是降低由操作系统,然后分派消息窗口消息队列处理,然后将其抽出,并在集中控制上提出相应的事件。与人类反应时间相比,准确性已经足够好了,无论你在UI线程上执行什么工作。 – jods
按键的速度取决于按键重复速率的窗口配置。 http://windows.microsoft.com/is-is/windows-xp/help/adjust-the-character-repeat-rate – Tony