2013-04-22 68 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 – 2013-04-22 05:55:43

+0

關閉會提高'formClosing'事件,所以你在這裏再次調用 – V4Vendetta 2013-04-22 05:56:40

回答

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這是更好的解決方案,我刪除了我的答案。 – 2013-04-22 05:59:25

+0

@DanielHilgarth:謝謝:) – 2013-04-22 06:00:14

+0

感謝的人,這個作品 – Connor 2013-04-22 06:01:45

3

您不需要調用Close()方法。有人已經調用它,如果mainForm_FormClosing事件被執行。

2

事件「mainForm_FormClosing」正在執行,因爲Form已關閉,無需調用「Close();」在If和Else條件下。

如果你這樣做,你會得到一個「System.StackOverflowException」