Tôi có một lớp Class
tạo ra một Thread
trong hàm tạo của nó. Chủ đề này chạy một vòng lặp while(true)
đang đọc dữ liệu không quan trọng từ một số NetStream
. Các chủ đề sẽ được hủy bỏ bởi destructor:Destructor không bao giờ được gọi là
~Class()
{
_thread.Abort();
_thread = null;
}
Khi chương trình muốn chấm dứt việc sử dụng các ví dụ Class
's - ClassInstance
, nó gọi:
ClassInstance = null;
GC.Collect;
Tôi nghĩ đó có nghĩa là ~Class()
sẽ người gọi tự động vào thời điểm đó - nhưng không phải.
Chuỗi này tiếp tục chạy ngay cả sau Application.Exit()
và quay lại từ Main()
.
Trình hủy lớp C# [không được đảm bảo để được gọi] (http://blogs.msdn.com/b/ericlippert/archive/2010/01/21/what-s-the-difference-between-a- destructor-and-a-finalizer.aspx). Sử dụng [Mẫu vứt bỏ] (http://msdn.microsoft.com/en-us/library/fs2xkftw.aspx) để xóa tài nguyên xác định. – Romoku
Thay vì gọi GC.Collect, sử dụng câu lệnh using() http://msdn.microsoft.com/en-us/library/yh598w02.aspx Lời khuyên chung là bạn không nên gọi GC.Collect -> http: // stackoverflow.com/questions/478167/when-is-it-acceptable-to-call-gc-collect – Oliver
Đặt một biến mẫu thành 'null' là * không giống * như gọi hàm hủy! Trên thực tế nó hầu như không ảnh hưởng đến cá thể đối tượng, chỉ có một tham chiếu ít hơn. –