當我關閉我的C#應用程序時,我得到一個窗口聲音,指出一個錯誤。然而,當我通過關閉過程進行調試時,我一路回到Program類...關閉C#錯誤
它通過Application.Run(..),退出靜態無效Main()函數,然後造成誤差噪音。
除了噪音以外,沒有任何指示有錯誤。我甚至不知道從哪裏開始尋找!有任何想法嗎?
當我關閉我的C#應用程序時,我得到一個窗口聲音,指出一個錯誤。然而,當我通過關閉過程進行調試時,我一路回到Program類...關閉C#錯誤
它通過Application.Run(..),退出靜態無效Main()函數,然後造成誤差噪音。
除了噪音以外,沒有任何指示有錯誤。我甚至不知道從哪裏開始尋找!有任何想法嗎?
清理過程中出現問題,可能很難找到。有兩種方法來攻擊它:
通過在try/catch中包裝Main中的所有內容並在Application.Run之後添加一些代碼,以增強在仍處於控制範圍內時(主要)檢測它的機會盡可能多地進行清理。我能想到的幾件事:
GC.Collect();
GC.WaitForPendingFinalizers();
Thread.Sleep(1000);
GC.Collect();
GC.WaitForPendingFinalizers();
收集至少2次,也許更多。本着同樣的精神,在MainForm的OnClosing中添加一些Application.DoEvents()。
另一種方法更依賴於您的代碼,在黑暗中進行刺探:查找可設置爲null的所有靜態字段/屬性以及可以在Exit上確定性地處置的Disposable對象。
所有這些與FredrikMörks對UnhandledException事件的建議相結合。
它只發生在關閉你的應用程序或關閉任何應用程序時發生?
我的第一個想法是,有人改變了你的Windows聲音模式,並設置關閉程序的聲音與你混亂:)。
你可能爲了獲取某些信息而需要做的一件事就是爲AppDomain.UnhandledException和Application.ThreadException事件掛接事件監聽器。這是一個長鏡頭,但可能會提供一些信息。您可以添加在主函數來設置他們之初以下,並將它們顯示在消息框中的任何異常信息:
static void Main()
{
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(delegate(object sender, UnhandledExceptionEventArgs e)
{
MessageBox.Show(e.ExceptionObject.ToString());
});
Application.ThreadException += new ThreadExceptionEventHandler(delegate(object sender, ThreadExceptionEventArgs e)
{
MessageBox.Show(e.Exception.ToString());
});
// run your app
}
你是否有引發自定義事件的任何代碼?當應用程序試圖實時關閉時,這些進程仍可以運行嗎?
您是否有任何可以在關閉時運行的自定義Dispose代碼?
你的程序在做什麼類型的事情?例如,它是否開始新線程? – 2009-06-05 20:35:57
我以爲我是在啓動線程,但即使沒有觸及那個代碼,錯誤也會發生。所以,線程不是一個因素。 – Matt 2009-06-05 20:43:02
我認爲你應該發佈代碼,如果你在程序關閉時執行任何代碼。 另外,該程序如何關閉?通過使用關閉按鈕? – bobbyalex 2009-06-05 20:49:33