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 に答える