0

我有一个简单的问答型程序,代码如下:

  private void AskQuestion(Question q)
        {
            questionbox.Text = q.GetQuestion();
            answering = true;

            while (answering == true)
            {

            }

                if (q.GetQuestion() == answerbox.Text)
                {
                    MessageBox.Show("well done");
                }

                else
                {
                    MessageBox.Show("nope");
                }

        }

回答只是我拥有的一个开关,因此在用户输入答案并单击按钮之前,程序不会测试答案。

我有一个供用户单击的按钮,它将其切换为 false:

private void Answer_Click(object sender, EventArgs e)
        {
            answering = false; 
        }

这个想法是当用户回答问题时,while循环暂停程序并退出,但它只是冻结整个事情。

我尝试通过线程睡眠来减慢它的速度,然后我找了一个计时器来观察变量,在一个新线程上尝试了它,但是线程不会相互通信,所以我处于这种愚蠢的情况,我被卡住了.

请帮助程序员,并在这里为我提出一个策略?

4

2 回答 2

0

这是示例:

        private void button2_Click(object sender, EventArgs e)
        {
            hey = true;
            Thread thread = new Thread(new ThreadStart(AskQuestion));
            thread.Start();
        }

        bool hey;
        void AskQuestion()
        {
            while (hey)
            { 

            }
            MessageBox.Show("Done");
        }

        private void answer_Click(object sender, EventArgs e)
        {
            hey = false;
        }

这会在按下 answer_Click() 时显示 MessageBox。它不会冻结。

于 2013-03-29T06:00:24.913 回答
0

您可以将问题存储在一个字段中并将答案逻辑放入Answer_Click

private Question _currentQuestion;

private void AskQuestion(Question q)
{
    _currentQuestion = q.GetQuestion();
    questionbox.Text =_currentQuestion;
}

private void Answer_Click(object sender, EventArgs e)
{
   if (_currentQuestion != null)
   {
      if (_currentQuestion == answerbox.Text)
      {
          MessageBox.Show("well done");
      }

      else
      {
          MessageBox.Show("nope");
      }
   }
}
于 2013-03-29T06:00:46.587 回答