メモリ ゲーム用の C# コードを作成しようとしています。最初にマトリックス(3つの要素を持つ)をビューアに表示し、次に各要素のいくつかのオプションを表示して、一度にそのセルを強調表示したいと思います。ユーザーは回答パネルから正しい要素を選択する必要があります。表示回答マトリックス (タスクとして定義) がこれを行います。表示応答タスクの for ループにメッセージ ボックスを配置すると、出力シーケンス (最初に表示される各要素の表示マトリックス、表示応答など) が正常に機能します。回答が表示されるたびにクリックして、次を待ちます。それは正常に動作します。しかし、メッセージボックスを削除すると(クリックする必要がないため)、回答が表示された後にプログラムが停止します(最初の要素の場合)。関連するコード部分は次のとおりです。
Mainform{
......declare number of textboxes and lables...for matrix display
}
 In the Buttonclick from the main form:
{
var firstTask = new Task(() => invokedisplaymatrix(MatrixInfoValues));
var secondTask = firstTask.ContinueWith((t) => invokedisplayblankmatrix(MatrixInfoValues));
var thirdTask = secondTask.ContinueWith((t) =>invokedisplayanswermatrix(MatrixInfoValues));
var fourthTask = thirdTask.ContinueWith((t) => invokedDoselection(MatrixInfoValues));
            firstTask.Start();
}
  private void invokedisplaymatrix(object Minfo1)
        {
            lock (this)
            {
                Invoke(new displaymatrixdelegate(displaymatrix), new object[] { Minfo1 });
                Thread.Sleep(2000);
            }
        }
        private void invokedisplayblankmatrix(object Minfo2)
        {
            lock (this)
            {
                Invoke(new displayblankmatrixdelegate(displayblankmatrix), new object[] { Minfo2 });
            }
        }
        private void invokedisplayanswermatrix(object Minfo3)
        {
            lock (this)
            {
                Invoke(new displayanswermatrixdelegate(displayanswermatrix), new object[] { Minfo3 });
                // Invoke(new displaymatrixdelegate(displaymatrix),new object[] {indx});
            }
        }
..Then in the display answer matrix function:
 public void displayanswermatrix(int[] Minfo3)
        {
 foreach (int ind in FilledTextBoxID2)
            {
                foreach (Control c in splitContainer1.Panel1.Controls)
                {
                    if (c is TextBox && c != null)
                    {
                        if ((boxindexL + 1) == FilledTextBoxID2[j])
                        {
                            c.BackColor = Color.OrangeRed;
                        }
                        else
                        {
                            c.BackColor = Color.MediumSpringGreen;
                        }
                       boxindexL = boxindexL + 1;
                    }
                }
                int AnswerLocation = RandomNumber(1, 5);
                int[] answeroptions=excludenumberfromarray(MatrixValues2[j]); //write a function to make random numbers between 1 and 9 excluding MatrixValues2[j]
                foreach (Control c in splitContainer1.Panel2.Controls)
                {
                    if (c is TextBox)
                    {
                        //c.Text = Convert.ToString(boxindexR);
                            //answeroptions[boxindexR]);
                        if ((boxindexR + 1) == AnswerLocation)
                        {
                            c.Text = Convert.ToString(MatrixValues2[j]); //boxindexR = boxindexR - 1;
                        }
                        else
                        {
                            c.Text = Convert.ToString(answeroptions[boxindexR]);
                        }
                       //
                       //}//placing the required number in the randomly selected box
                       boxindexR = boxindexR + 1;
                    }
                 }
                Thread.Sleep(2000);
               MessageBox.Show("hello after one number");
 j = j + 1;
                boxindexR = 0; boxindexL = 0;
            }//end of first foreach
        }//display answer matrix end
メッセージ ボックスにコメントすると、最初の要素が表示された後、インターフェイスがそこでスリープします。このエラーがどのように発生するかを教えてください。