【发布时间】:2011-08-03 18:23:58
【问题描述】:
我有一个带有析构方法的空白 Winform
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());
}
}
当表单被销毁时,我希望它写入输出窗口:
(Form1打开) Form1.初始化 41149443 (Form1 关闭) Form1.Dispose 41149443MSDN 提出了 3 种实现析构函数的方法:
~析构函数() http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx
一次性 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 是否被垃圾回收了?
【问题讨论】:
-
为什么?你想做什么?
-
你不能假设析构函数会被调用。 (例如,如果你有足够的内存,那么永远不要调用任何析构函数是完全有效的。)
-
trace不是写了吗?
-
输出跟踪没有写“Form1.Dispose 41149443”
-
在应用程序终止之前是否刷新输出跟踪?否则,您的跟踪可能会在写入之前被垃圾收集。
标签: c# winforms garbage-collection