Tôi có một Winform trống với một phương pháp destructorTại sao destructor của tôi không bao giờ chạy?
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());
}
}
Khi các hình thức bị hủy diệt, tôi muốn nó ghi vào sổ đầu ra:
(Form1 opened) Form1.Initialize 41149443 (Form1 closed) Form1.Dispose 41149443
MSDN gợi ý 3 cách thực hiện destructor:
~ Destructor() http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx
IDisposable http://msdn.microsoft.com/en-us/library/system.idisposable.aspx
SafeHandle mẫu http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.safehandle.aspx
Tuy nhiên, không ai trong số những cách viết "Form1.Dispose 41.149.443" vào cửa sổ đầu ra. Vì vậy, tôi không thể biết liệu biểu mẫu đã bị hủy hay chưa. Gợi ý?
Tôi có nên từ bỏ hy vọng đạt được điều này do sự không chắc chắn của bộ thu gom rác không?
Có cách nào khác để biết liệu Form1 có bị thu gom rác không?
Tại sao? Bạn đang cố làm gì vậy? – SLaks
Bạn không thể giả định rằng destructor sẽ được gọi. (Ví dụ, nếu bạn có đủ bộ nhớ, nó hoàn toàn hợp lệ không bao giờ gọi bất kỳ destructor, bao giờ hết.) – katrielalex
Không phải là dấu vết được viết? –