C#中的错误捕获关闭

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;
        }
   }

我的问题是,我收到了这个错误:

"请确保您没有无限循环或无限递归"

有什么想法如何解决这个问题吗?


请阅读http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title。 - Soner Gönül
关闭窗体将会触发 formClosing 事件,因此你在这里又调用了它。 - V4Vendetta
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;
    }
}

我正在尝试,它说我必须等待10分钟,可能是因为垃圾邮件,等时间到了,我会标记它,谢谢! - Connor

3

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


2
事件“mainForm_FormClosing”是由于窗体已关闭而执行,因此无需在If和Else条件中调用“Close();”。
如果这样做,您将会得到一个“System.StackOverflowException”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接