4

我正在尝试关闭我的表单,以便当用户退出时,它将“用户已退出”保存到文本文件中,这是我的代码:

private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
   {

        if (String.IsNullOrEmpty(directory))
        {
            Close();
            e.Cancel = false;
        }
        else
        {
            string time = DateTime.Now.ToString("hh:mm");

            TextWriter msg = new StreamWriter(directory, true);

            msg.WriteLine(" (" + time + ") == " + uName + " Has Left The Chat == ");

            msg.Close();

            Close();
            e.Cancel = false;
        }
   }

我的问题是,我收到此错误:

“确保您没有无限循环或无限递归”

有想法该怎么解决这个吗?

4

3 回答 3

8

您不能从表单关闭中调用 Close() 方法。删除所有 Close() 调用,它将起作用。

private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
    if (String.IsNullOrEmpty(directory))
    {
        e.Cancel = false;
    }
    else
    {
        string time = DateTime.Now.ToString("hh:mm");

        using(TextWriter msg = new StreamWriter(directory, true))
        { 
            msg.WriteLine(" (" + time + ") == " + uName + " Has Left The Chat == ");
            msg.Close();
        }
        e.Cancel = false;
    }
}
于 2013-04-22T05:57:08.070 回答
3

您不需要调用该Close()方法。mainForm_FormClosing如果事件已执行,则有人已经调用它。

于 2013-04-22T05:58:01.623 回答
2

由于Form已关闭,事件“ mainForm_FormClosing ”正在执行,无需调用“Close();” 在 If 和 Else 条件下。

如果你这样做,你会得到一个“System.StackOverflowException”

于 2013-04-22T06:02:15.660 回答