Точная синхронизация взаимодействия с пользователем в окне WPF - PullRequest
1 голос
/ 30 июля 2011

Мне нужно рассчитать интервал между двумя событиями GUI в окне WPF - в частности, время между событием Button_Click и событием Canvas_MouseLeftButtonDown. Я использую вызовы System.Diagnostics.Stopwatch для измерения этого интервала. Хотя класс секундомера внутренне очень точен (в отличие от альтернатив с более низким разрешением, таких как DateTime.Now), я предполагаю, что между событиями, генерируемыми GUI, существует относительно большая гранулярность, порядка обратной частоты кадров (но все же очень коротко в человеческом масштабе) однако для очень быстрых щелчков (лучшее, что я мог сделать, было, очевидно, 50 мс), гипотетическая задержка события GUI может быть значительной. Кто-нибудь знает, что это за гранулярность, просто ради установления баров ошибок и значащих цифр?

1 Ответ

1 голос
/ 30 июля 2011

Вы можете настроить что-то, что использует SendInput для отправки щелчков мыши в GUI.Что-то вроде:

Initialize manual reset event
Start stopwatch_1
Send mouse click
wait for event
Get elapsed time of stopwatch_1

В вашем обработчике событий:

Get elapsed time of stopwatch_1
set event

По сути, запустите тест, нажав на кнопку, задержите его на несколько секунд, чтобы вы могли навести мышьнад кнопкой, которую вы хотите щелкнуть.

Чтение времени в обработчике событий покажет вам, сколько времени существует между полученным кликом и исполняемым обработчиком.Окончательное чтение - это общее прошедшее время, которое, поскольку обработчик событий ничего не делает, должно быть общим объемом служебной информации.За вычетом времени, необходимого для обработки события.

Обратите внимание, что вы не хотите ждать в потоке GUI.Вам понадобится метод, который вызывает SendInput для выполнения в отдельном потоке.

...