I got following problem with testing reaction time in C#. When I click earlier reaction button which is still disabled, stopwatch stop on that earlier click. Here's my code:
private void start_btn_Click(object sender, EventArgs e)
{
stopwatch.Reset();
for (int i = 3; i > 0; --i)
{
react_btn.Text = i.ToString();
Task.Delay(500).Wait();
react_btn.Invalidate();
react_btn.Enabled = false;
}
react_btn.Text = "Click when red";
Task.Delay(random.Next(2000, 5000)).Wait();
stopwatch.Start();
react_btn.BackColor = Color.Red;
react_btn.Text = "Click!";
react_btn.Enabled = true;
}
private void react_btn_Click(object sender, EventArgs e)
{
if (stopwatch.IsRunning)
{
stopwatch.Stop();
timesTested.Add(stopwatch.ElapsedMilliseconds);
react_btn.BackColor = Color.Yellow;
react_btn.Text = string.Format("Your time {0} ms", stopwatch.ElapsedMilliseconds);
}
}
I hope you ended up with something like:
private async void start_btn_Click(object sender, EventArgs e)
{
stopwatch.Reset();
react_btn.Enabled = false;
for (int i = 3; i > 0; --i)
{
react_btn.Text = i.ToString();
await Task.Delay(500);
}
react_btn.Text = "Click when red";
await Task.Delay(random.Next(2000, 5000));
stopwatch.Start();
react_btn.BackColor = Color.Red;
react_btn.Text = "Click!";
react_btn.Enabled = true;
}