お世話になります。

ミニゲームを作ろうとしています。
簡単な勝ち負けのフォームを繰り返すだけの処理なんですが、
それを自動化しようと、『フォームがアクティブ化されたらボタンを押される』
のような処理でテストしていたら、図の様なエラーが発生しました。
画像の説明をここに入力

30回ほど繰り返すと発生するみたいですが、performClickを外して、
手動で行っている分には発生しません。

対策方法を教えてください。

下記に、全ソースを記述します。

using System;
using System.Windows.Forms;

namespace Formest
{
    public partial class Form1 : Form
    {
    /** フォーム1 ただフォーム2をボタンで表示するだけ */
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.ShowDialog(this);
        }
    }
}

using System;
using System.Windows.Forms;

namespace Formest
{
    /** フォーム3を呼び出す為のフォーム。ここで自動化を行っている。 */
    public partial class Form2 : Form
    {
        private const int WIN = 1;
        private const int LOSE = -1;

        private Form3 f3 = new Form3();

        private int win = 0;

        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Activated(object sender, EventArgs e)
        {
            this.Text = "" + this.win;

            // ↓自動化している。コメントアウトして手動でカチカチすれば正しく動く。
            this.button1.PerformClick();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();

            if (this.process() == LOSE)
            {
                this.Show();
                MessageBox.Show("残念。" + this.win + "連勝まで行きました。");
                this.Close();
            }
            else
            {
                this.Show();
                this.Activate();
            }
        }
        private int process()
        {
            //  ここで例外発生
            DialogResult ans = this.f3.ShowDialog(this);


            // 勝った場合
            if (ans == DialogResult.Yes)
            {
                this.win++;

                return WIN;
            }

            //  負けた場合
            else if (ans == DialogResult.No)
            {
                return LOSE;
            }
            return 0;
        }
    }
}


using System;
using System.Windows.Forms;

namespace Formest
{
    public partial class Form3 : Form
    {
    /* 仮の戦闘シーン。今は乱数で勝敗を分けているだけ。 */
        public Form3()
        {
            InitializeComponent();
        }

        private void Form3_Shown(object sender, EventArgs e)
        {
            System.Threading.Thread.Sleep(50);

            Random rnd = new Random();

            int i = rnd.Next(256);

            if (i == 0)
            {
                this.DialogResult = DialogResult.No;

            }
            else
            {
                this.DialogResult = DialogResult.Yes;
            }
        }
    }
}

以上です。
Form2にあるボタンをクリックすれば戦闘が始まる感じです。

よろしくお願いいたします。