2016-10-20 4 views
-3

Je veux mesurer le temps (secondes) quand un utilisateur appuie sur la touche flèche droite du clavier et le ramasse.C# Intervalle de mesure entre le clavier et le clavier?

J'ai fait des recherches à ce sujet et trouver une page mais il n'y a pas une bonne réponse.

Comment puis-je mesurer cette fois?

mon code

I définir une liste en haut de la classe:

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

lorsque l'utilisateur presse droite du clavier: (en méthode Form_KeyDown)

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

lorsque l'utilisateur presse droite du touches et maintenues dans la liste Ajouter dans la liste

lorsque l'utilisateur ramasse la clé (dans Form_keyUp meth od)

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

Pouvez-vous inclure du code ou des exemples précis de ce que vous avez essayé jusqu'à présent? Pouvez-vous également être plus précis sur le problème que vous essayez de résoudre? Voulez-vous mesurer cela dans votre application, à travers la machine comme un keylogger? Est-ce que c'est dans une situation de jeu ou juste une application métier? –

+0

Commencez un chronomètre sur le clavier, terminez-le au démarrage. Calculez la différence. – dman2306

+0

@NicholausLawson j'écris mon code. Je veux utiliser ceci pour avancer ou reculer un film. – saedbfd

Répondre

-1

Vous pouvez commencer par la recherche des différentes classes pour mesurer le temps en C#, comme this one.

Vous aurez également besoin d'une classe pour détecter la touche enfoncée et la touche enfoncée. . Au-delà de cela, la mise en œuvre devrait être assez simple. Démarrer la minuterie lorsque la touche est enfoncée, arrêter la minuterie lorsque la touche est relâchée, et utiliser ce temps comme mesure entre les deux événements.

+0

merci, mais comment puis-je démarrer et arrêter la minuterie et mesurer le temps entre cela? Avez-vous un exemple de code? – saedbfd

+0

@saedbfd J'ai regardé votre montage. Notez que la méthode List.Add ajoutera une valeur à la * end * d'une liste, pas au début. Ainsi, dans votre implémentation actuelle, chaque fois que vous relèverez une clé, elle sera comparée à la * première * fois où vous avez enfoncé une touche, et non la dernière. – DBPriGuy

+0

merci j'utilise chronomètre et je pourrais mesurer le temps – saedbfd

0

Votre code est un bon début, même si vous devrez peut-être le modifier un peu pour le voir fonctionner.

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; 
    } 
} 

Vous pouvez également déclencher une minuterie à partir de ceci si vous le souhaitez, au lieu de saisir l'heure actuelle et de l'évaluer.

+0

Le code dans cette réponse ne fonctionnera comme prévu une fois. – DBPriGuy

4

Cela peut être une alternative

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

C'est l'alternative la meilleure et la plus précise! –

+1

Bonne réponse, et franchement plus utile que le mien si vous cherchez un exemple spécifique à apprendre. – DBPriGuy