我正在研究名为IAT的项目。用两个词来说,顶角有两个类别(左,右),与这些类别相关的单词列表随机显示在屏幕中央(1个单词只匹配一个类别)。 在中间显示单词后,程序应该"停止"然后等到用户按键对单词进行排序(左侧为左侧,右侧为右侧)。在用户给出答案后,程序将计算时间浪费在答案上。然后,显示另一个单词,这个过程继续进行几次迭代 总而言之,我想要相当于RedKey()。调试时我意识到程序对while(true / stopwatch.IsRunning()/ etc)循环中的按键没有反应。我应该怎么做才能使程序等待用户回答并做出反应。
答案 0 :(得分:0)
当程序显示单词时,你应该启动计时器( 使用System.Timers.Timer ),处理它的Ellapsed事件,在处理程序中你必须增加变量将是你的柜台(用户回答问题多长时间) 然后在MainWindow的KeyDown事件中你可以检查按下的键是左箭头还是右箭头,然后如果启用了计时器,如果是,你知道问题已经准备好应答,现在只需停止计时器,你的计数器变量将显示用户按箭头的秒数(当然你必须调整Timer的间隔)。
这里有完整的代码(当然没有问题逻辑)
public partial class MainWindow : Window
{
Timer answerTimeTimer; // it's for counting time of answer
Timer questionTimer; // this is used for generating questions
int timeOfAnswer;
public MainWindow()
{
InitializeComponent();
questionTimer = new Timer()
{
Interval = 2500
};
answerTimeTimer = new Timer()
{
Interval = 1000
};
answerTimeTimer.Elapsed += AnswerTimeTimer_Elapsed;
questionTimer.Elapsed += QuestionTimer_Elapsed;
questionTimer.Start();
}
private void QuestionTimer_Elapsed(object sender, ElapsedEventArgs e)
{
AskQuestion();
}
private void AskQuestion()
{
//Your questions logic
Console.WriteLine("Question asked");
Dispatcher.Invoke(new Action(() => label.Content = "Question asked")); // This line is just to update the label's text (it's strange because you need to update it from suitable thread)
answerTimeTimer.Start();
questionTimer.Stop();
}
private void AnswerTimeTimer_Elapsed(object sender, ElapsedEventArgs e)
{
timeOfAnswer++;
Dispatcher.Invoke(new Action(() => label.Content = timeOfAnswer));
}
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Left || e.Key == Key.Right)
{
if (answerTimeTimer.Enabled)
{
answerTimeTimer.Stop();
//Here you can save the time from timeOfAnswer
Console.WriteLine("Question answered in " + timeOfAnswer);
Dispatcher.Invoke(new Action(() => label.Content = "Question answered in " + timeOfAnswer));
timeOfAnswer = 0; // Reset time for the next question
questionTimer.Start();
}
}
}
}
XAML中只有一个标签表明一切正常
<Label x:Name="label" Content="Right or left" HorizontalAlignment="Left" Margin="125,72,0,0" VerticalAlignment="Top"/>
如果您有任何问题,请询问:)