Sto sviluppando un'applicazione in cui l'utente può vedere qualcosa e deve reagire facendo clic su un tasto sulla tastiera. Il tempo di reazione è cruciale e più preciso è, meglio è.WPF keyDown precisione i tempi di risposta
ho scritto campione app inf WPF solo poche righe di codice per testare le impostazioni predefinite:
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
è un'etichetta solo semplice.
Ciò che è strano è che quando preme per esempio lo spazio e lo tengo il valore delle variazioni lbl
nell'intervallo: 30-33.
così non posso prevedere quello che è l'accuratezza di risposta? È impossibile avere ad esempio 1 ms di precisione? L'utente colpisce lo spazio e allo stesso tempo (ad esempio 1 ms di accuratezza) Posso gestirlo nel gestore di eventi?
La domanda principale è:
diciamo che ho un gestore di eventi chiave-down:
Test_KeyDown(object sender, KeyEventArgs keyEventArgs)
{
time = stopwatch.elapsed();
stopwatch.Restart();
}
qual è il valore minimo di "tempo" che può eventualmente verificarsi? Posso essere sicuro che il valore temporale sia accurato a 1 ms? In questo metodo, ho avviare il cronometro ma poi ho dovuto aspettare - per quanto tempo - per la GUI per aggiornare?
Non sai cosa stai cercando di misurare lì, né come lo fai. 'KeyDown' non viene sollevato continuamente mentre il tasto è premuto (credo che sarebbe' KeyPress') quindi tenere la barra spaziatrice non dovrebbe aggiornare l'etichetta più di una volta, vero? Se si intende che si tiene la barra spaziatrice prima di mostrare la finestra, quindi si confronta il codice tra il costruttore fino a quando la finestra è finalmente attiva e pompa gli eventi. – jods
Per quanto ne so, l'evento è il più veloce possibile e funziona praticamente allo stesso modo delle altre app di Windows: la chiave down è gestita dal sistema operativo, che invia un messaggio alla coda dei messaggi della finestra, che viene quindi pompato e l'evento corrispondente viene sollevato sul controllo focalizzato. La precisione è abbastanza buona se confrontata con i tempi di reazione umani, a meno che tu non lavori sul tuo thread UI. – jods
La velocità di un tasto premuto dipenderà dalla configurazione di Windows della frequenza di ripetizione dei tasti. http://windows.microsoft.com/is-is/windows-xp/help/adjust-the-character-repeat-rate – Tony