Сначала создайте пару членов класса для хранения, какая клавиша была нажата и какое время.
private KeyChar _pressedKey;
private Stopwatch _keyPressStopwatch = new Stopwatch();
Затем напишите ваш обработчик событий KeyDown
, чтобы значения были введены в эти переменные:
private void KeyPressed(object sender, KeyEventArgs e)
{
_keyPressStopwatch.Restart();
_pressedKey = e.KeyChar;
}
Теперь напишите обработчик событий KeyUp
, чтобы выполнить остальную часть работы:
private void KeyReleased(object sender, KeyEventArgs e)
{
if (e.KeyChar != _pressedKey) // We only care about the last key pressed.
return;
_keyPressStopwatch.Stop();
double milliseconds = _keyPressStopwatch.ElapsedMilliseconds;
// milliseconds is now how long the key was pressed. Do something with it.
}
Не забудьте подписаться на события KeyDown
и KeyUp
для любого элемента управления, с которым связанс этим.
РЕДАКТИРОВАТЬ
В комментариях был поднят отличный момент о точности синхронизации, поэтому я переключил код с использования DateTime.UtcNow
на использование Stopwatch
.