Giải thích khác nhau, có nhiều phức tạp hơn đối với câu hỏi này hơn là đáp ứng mắt.
Chắc chắn Disposed
được gọi, nhưng nó có làm gì không? Nó phụ thuộc.
Nếu bạn đã đăng ký sự kiện Disposed
của trang hoặc kiểm soát và đang ngân hàng trên trang đó được gọi theo yêu cầu, bạn có thể ngạc nhiên. Vâng, nói về mặt kỹ thuật ProcessRequestCleanup()
gọi nó cho bạn, nhưng có một cái nhìn vào những gì nó thực sự gọi:
public virtual void Dispose()
{
IContainer service = null;
if (this.Site != null)
{
service = (IContainer) this.Site.GetService(typeof(IContainer));
if (service != null)
{
service.Remove(this);
EventHandler handler = this.Events[EventDisposed] as EventHandler;
if (handler != null)
{
handler(this, EventArgs.Empty);
}
}
}
if (this._occasionalFields != null)
{
this._occasionalFields.Dispose();
}
}
Nếu không có một bề mặt thiết kế, mã này về cơ bản không có gì tại thời gian chạy, có nghĩa Disposed
xử lý của bạn sẽ không bao giờ thực hiện.
Bài học không dựa trên các trình xử lý Disposed
để thực thi theo yêu cầu. Bạn có thể ghi đè lên nó để đảm bảo một cái gì đó thực hiện, nhưng Unloaded
là một đặt cược an toàn hơn nhiều.
Thx Duncan, đó là bằng chứng thực sự đầu tiên tôi đã nhìn thấy. –