我有一個析構函數方法爲什麼我的析構函數從不運行?
public partial class Form1 : Form
{
public Form1()
{
System.Diagnostics.Trace.WriteLine("Form1.Initialize " + this.GetHashCode().ToString());
InitializeComponent();
}
~Form1()
{
System.Diagnostics.Trace.WriteLine("Form1.Dispose " + this.GetHashCode().ToString());
}
}
當窗體被破壞,我希望它寫入到輸出窗口中的空白Winform的:
(Form1 opened) Form1.Initialize 41149443 (Form1 closed) Form1.Dispose 41149443
MSDN建議實施的析構函數3種方式:
〜析構函數() http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx
IDisposable的 http://msdn.microsoft.com/en-us/library/system.idisposable.aspx
的SafeHandle模式 http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.safehandle.aspx
然而,所有的這些方式寫 「Form1.Dispose 41149443」 到輸出窗口。 因此,我無法分辨表單是否已被銷燬。建議?
由於垃圾收集器的不確定性,我是否應該放棄實現這個目標的希望?
是否有另一種方法知道Form1是否被垃圾收集?
爲什麼?你想做什麼? – SLaks
你不能認爲析構函數會被調用。 (例如,如果你有足夠的內存,永遠不會調用任何析構函數是完全有效的。) – katrielalex
是不是寫入的跟蹤? –