Я разрабатываю приложение, в котором пользователь может что-то увидеть и должен реагировать, нажав клавишу на клавиатуре. Время реакции имеет решающее значение, и чем точнее, тем лучше.WPF keyDown time time
Я написал пример приложение WPF Inf только несколько строк кода, чтобы проверить настройки по умолчанию:
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 мс? В этом методе я запускаю секундомер, но потом мне нужно подождать - как долго - для обновления графического интерфейса?
Не знаете, что вы пытаетесь измерить там, и как вы это делаете. 'KeyDown' не поднимается непрерывно, пока ключ не работает (я думаю, это будет' KeyPress'), поэтому удерживать пробел не нужно обновлять ярлык несколько раз, не так ли? Если вы имеете в виду, что перед тем, как показывать окно, вы удерживаете пробел, тогда вы сравниваете код между конструктором, пока окно не станет окончательно активным и не накинет события. – jods
Насколько я знаю, отправка события происходит так же быстро, как это может быть и работает почти так же, как это делает любое другое приложение Windows: клавиша, находящаяся вниз, обрабатывается ОС, которая затем отправляет сообщение в очередь вашего окна сообщений, который затем накачивается, и соответствующее событие поднимается на сфокусированном контроле. Точность достаточно хороша по сравнению с временами реакции человека, если вы не выполняете работу над потоком пользовательского интерфейса. – jods
Скорость нажатой клавиши будет зависеть от конфигурации окна частоты повторения клавиш. http://windows.microsoft.com/is-is/windows-xp/help/adjust-the-character-repeat-rate – Tony