2013-04-22 2 views
4

Я пытаюсь поймать близко моей форме, так что, когда пользователь выходит, он сохраняет «Пользователь вышел» в текстовый файл, это мой код:Ошибка ловли близко в C#

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

Моя проблема в том, что я получаю эту ошибку:

"Make sure you do not have an infinite loop or infinite recursion"

Любые идеи о том, как исправить это?

+0

Пожалуйста, прочтите http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title –

+0

Well Close поднимет событие 'formClosing', поэтому вы вызываете его здесь – V4Vendetta

ответ

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

+1 Это лучшее решение, я удалил свой ответ. –

+0

@ DanielHilgarth: Спасибо :) –

+0

спасибо, человек работает, – Connor

3

Вам не нужно называть метод Close(). Кто-то уже назвал это, если было выполнено событие mainForm_FormClosing.

2

Событие «mainForm_FormClosing» выполняется из-за формы была закрыта, нет необходимости вызывать «Close();» в состоянии If и Else.

Если вы так что вы получите «System.StackOverflowException»

Смежные вопросы