我正在编写一段代码,通过引导脚本引导用户。在显示答案之前,用户将有几秒钟的时间回答。
到目前为止,我的代码看起来像这样:
GuidedExercise3 exercise3 = new GuidedExercise3();
string AntonioAnswer = string.Empty; // expected answer
int upperBound = exercise3.Script.Count - 1; // zero-based counting
for(int i = 0; i < upperBound; i += 2)
{
labelInstructions.Text = exercise3.Script[i].TextToSpeak;
AntonioAnswer = exercise3.Script[i+1].TextToSpeak; // answer
SetTimer(AntonioAnswer, txtAntonio); // set timer sending in the answer and the TextBox object.
sysTimer.Start();
}
List的奇数行包含问题,偶数行包含预期的答案。我的问题是如何显示X秒的问题,然后在此WinForms应用程序中获取用户的答案,然后在计时器过去时显示答案,让用户不要进入脚本的下一步但允许他们回答问题(在文本框中)。
我检查了这个StackOverflow问题,但它不匹配:Implementing a loop using a timer in C#
答案 0 :(得分:1)
以下是我将如何处理这样的事情:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
MoveNextQuestion();
timerAnswer.Interval = 5000;
timerAnswer.Start();
}
private string[] _questionsAndAnswers = new[]
{
"What colour is the sky?",
"Blue",
"What do chickens lay?",
"Eggs",
};
private int _currentIndex = -2;
private void timerAnswer_Tick(object sender, EventArgs e)
{
MoveNextQuestion();
}
private void buttonAnswer_Click(object sender, EventArgs e)
{
MoveNextQuestion();
}
private void MoveNextQuestion()
{
_currentIndex += 2;
if (_currentIndex < _questionsAndAnswers.Length)
{
labelQuestion.Text = _questionsAndAnswers[_currentIndex];
}
else
{
timerAnswer.Stop();
}
}
}
答案 1 :(得分:-1)
我能够使用BackgroundWorker对象轻松地完成此工作。有关确切的编码,请参阅MSDN上的以下文章。 BackgroundWorker Class。特别是他们在文档中有两个例子,第一个例子就足够了。 BackgroundWorker类允许我的UI在等待定时答案时继续接受用户输入。它在RunWorkerComplete事件上显示正确的答案。因此,在我的for循环中调用BackgroundWorker的RunAsync。
我遇到了BackgroundWorker的另一个问题,即没有将控制权返回给我的循环。我正在分别研究这个问题。