Giả sử chúng ta có phương pháp sau đây:Có thể sử dụng lambdas làm trình xử lý sự kiện gây rò rỉ bộ nhớ không?
private MyObject foo = new MyObject();
// and later in the class
public void PotentialMemoryLeaker(){
int firedCount = 0;
foo.AnEvent += (o,e) => { firedCount++;Console.Write(firedCount);};
foo.MethodThatFiresAnEvent();
}
Nếu lớp với phương pháp này được khởi tạo và phương pháp PotentialMemoryLeaker
được gọi là nhiều lần, làm chúng tôi bị rò rỉ bộ nhớ?
Có cách nào để mở trình xử lý sự kiện lambda đó sau khi chúng tôi gọi xong MethodThatFiresAnEvent
không?
Như đã nêu trong các câu trả lời dưới đây, không có cách nào để mở móc ra nó mà không cần bảo tồn một tham chiếu. Tuy nhiên, bạn có thể tự ẩn: http://stackoverflow.com/questions/1747235/weak-event-handler-model-for-use-with-lambdas/1747236#1747236 – Benjol