Zajmuję się tworzeniem aplikacji, w której użytkownik może zobaczyć coś i musi zareagować, klikając przycisk na klawiaturze. Czas reakcji jest kluczowy i im dokładniejszy, tym lepiej.Klucz WPF Dokładność czasu odpowiedzi
pisałem próbka App inf WPF tylko kilka linijek kodu, aby przetestować ustawienia domyślne:
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
jest to tylko prosta etykieta.
Dziwne jest to, że gdy naciskam na przykład spację i przytrzymam ją, zmieni się wartość z zakresu: 30-33.
Więc nie mogę przewidzieć, jaka jest dokładność odpowiedzi? Czy nie można na przykład uzyskać dokładności 1 ms? Użytkownik trafia w przestrzeń iw tym samym czasie (na przykład dokładność 1 ms) Potrafię sobie z tym poradzić w procedurze obsługi zdarzeń?
Główne pytanie brzmi:
powiedzmy Mam obsługi zdarzeń key-dół:
Test_KeyDown(object sender, KeyEventArgs keyEventArgs)
{
time = stopwatch.elapsed();
stopwatch.Restart();
}
jaka jest minimalna wartość „czasu”, które mogą ewentualnie wystąpić? Czy mogę mieć pewność, że wartość czasu jest dokładna do 1 ms? W tej metodzie uruchamiam stoper, ale muszę czekać - jak długo - na odświeżenie GUI?
Nie jestem pewien, co próbujesz zmierzyć, ani jak to robisz. 'KeyDown' nie jest wywoływane w sposób ciągły, gdy klawisz jest wyłączony (prawdopodobnie jest to" KeyPress "), więc przytrzymanie klawisza spacji nie powinno aktualizować etykiety więcej niż raz, prawda? Jeśli masz na myśli przytrzymanie klawisza spacji przed wyświetleniem okna, przetestuj kod pomiędzy konstruktorem, aż okno będzie w końcu aktywne i pompuje zdarzenia. – jods
Z tego co wiem, wysłanie zdarzenia jest tak szybkie, jak to tylko możliwe i działa prawie tak samo, jak każda inna aplikacja Windows: klucz jest w dół obsługiwany przez system operacyjny, który następnie wysyła komunikat do kolejki komunikatów okna, który jest następnie pompowany, a odpowiednie zdarzenie jest wywoływane w kontrolce skupionej. Dokładność jest wystarczająco dobra w porównaniu do czasu reakcji człowieka, bez wykonywania pracy nad wątkiem interfejsu użytkownika. – jods
Prędkość naciśnięcia klawisza zależy od konfiguracji okna częstości powtarzania klawiszy. http://windows.microsoft.com/is-is/windows-xp/help/adjust-the-character-repeat-rate – Tony