1

可能重复:
取消订阅 C# 中的匿名方法 如何取消注册“匿名”事件处理程序

好的,假设我有以下代码:

    private void AttachEvent(AwesomeObject someObject)
    {
        int id = GetCurrentIdValue();
        someUnknownClass.SomeEvent += () => someObject.CreateAwesomeness(id);
    }

(本质上,我只是想说明在此线程中建议的事件处理程序中使用局部变量的必要性)。从内存管理的角度来看,我不能仅仅从 someUnknownClass.SomeEvent 中分离,因为我没有处理程序的句柄。此外,假设 someUnknownClass 是第三方类型,因此我无法在该类中添加任何代码以按照建议在内部分离事件。

我的问题是,如何在仍然能够使用匿名方法作为事件处理程序的同时避免内存泄漏?

4

1 回答 1

0

这是不可能的,而不是你使用它们的方式。您可以做的是将该方法分配给一个变量,然后将该变量用于+-事件。但是这样一来,你就会失去闭包通常给你的“自然”感觉。

于 2012-04-11T20:29:16.340 回答