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