2016-10-20 12 views
-3

Я хочу измерить время (секунды), когда пользователь нажимает клавишу со стрелкой вправо на клавиатуре и поднимает ее.C# Измерительный интервал между клавиатурным нажатием клавиш и клавиатурой?

Я исследовал об этом и нашел некоторые страницы, но нет хорошего ответа.

Как я могу измерить это время?

мой код

Я определяю список в верхней части класса:

List<int> date_down = new List<int>(); 

, когда пользователь нажимает кнопку со стрелкой вправо ключ: (в методе Form_KeyDown)

if (Keyboard.IsKeyDown(Key.Right)) 
{ 
    date_down.Add(DateTime.Now.Second); 
} 

, когда пользователь нажимает кнопку со стрелкой вправо время и время простоя Добавить в список

когда пользователь забирает ключ (в Form_keyUp meth О.Д.)

if (e.Key == Key.Right) 
{ 
    var second = DateTime.Now.Second - date_down[0]; 
} 
+1

Вы можете включать в себя код или конкретные примеры того, что вы пробовали до сих пор? Можете ли вы также уточнить проблему, которую вы пытаетесь решить? Вы хотите измерить это в своем приложении, через машину, как кейлоггер? Это в игровой ситуации или просто в бизнес-приложении? –

+0

Начните секундомер при нажатии клавиш, завершите его при нажатии клавиши. Рассчитайте разницу. – dman2306

+0

@NicholausLawson я напишу свой код. Я хочу использовать это, чтобы выйти вперед или назад в кино. – saedbfd

ответ

-1

Вы можете начать с поиском различных классов для измерения времени в C#, например this one.

Вам также понадобится класс для обнаружения ключа и нажатия клавиш. Perhaps this might help.

Вне этого реализация должна быть довольно простой. Начать таймер при нажатии клавиши, остановить таймер при отпускании клавиши и использовать это время в качестве измерения между двумя событиями.

+0

спасибо, но как я могу запустить и остановить таймер и измерить время между этим? есть ли у вас образец кода? – saedbfd

+0

@saedbfd Я посмотрел ваше редактирование. Обратите внимание, что метод List.Add добавит значение к * концу * списка, а не к началу. Поэтому в вашей текущей реализации всякий раз, когда вы поднимаете ключ, он будет сравнивать его с * первым * временем нажатия клавиши, а не последним. – DBPriGuy

+0

спасибо, что я использую секундомер, и я мог измерить время – saedbfd

0

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

private void form1_KeyDown(object sender, System.Windows.Forms.KeyPressEventArgs e) 
{   
    if (e.Key == Key.Right) 
    { 
     date_down = DateTime.Now; 
    } 
    e.Handled = true; 
} 

private void form1_KeyUp(object sender, System.Windows.Forms.KeyPressEventArgs e) 
{ 
    if (e.Key == Key.Right) 
    { 
     var timeDelta = DateTime.Now - date_down; 
    } 
} 

Вы также можете запустить таймер из этого, если хотите, вместо того, чтобы захватывать текущее время и оценивать.

+0

Код в этом ответе будет работать только по назначению. – DBPriGuy

4

Это может быть альтернативный

using System.Diagnostics; 
using System.Windows.Forms; 

public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 

     var watch = new Stopwatch(); 
     KeyDown += (s, e) => watch.Start(); 
     KeyUp += (s, e) => { 
      watch.Stop(); 
      var elapsed = watch.ElapsedMilliseconds; // Duration 
      watch.Reset(); 
     }; 
    } 
} 
+1

Это лучшая и самая точная альтернатива! –

+1

Хороший ответ, и, откровенно говоря, более полезный, чем мой, если вы ищете конкретный пример для изучения. – DBPriGuy

 Смежные вопросы

  • Нет связанных вопросов^_^