分离一个匿名的事件处理程序

15 浏览
0 Comments

分离一个匿名的事件处理程序

\n可能是重复问题:
\n如何在C#中取消订阅匿名方法\n如何取消注册匿名事件处理程序 \n

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

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

\n(本质上,我只是试图说明在事件处理程序中使用局部变量的必要性,如此线程中建议的)。从内存管理的角度来看,我不能只是从someUnknownClass.SomeEvent中分离出来,因为我无法控制处理程序。此外,假设someUnknownClass是第三方类型,因此我无法在该类中添加任何代码来内部分离事件,就像建议的那样。\n我的问题是,如何避免内存泄漏,同时仍然能够使用匿名方法作为事件处理程序?

0
0 Comments

从上面的内容可以整理出问题的原因和解决方法。

问题的原因是:无法在使用匿名EventHandler的方式下分离EventHandler。

问题的解决方法是:将方法赋值给一个变量,然后使用该变量来添加或移除事件。但是这样做会失去闭包通常给你的“自然”感觉。

文章整理如下:

在使用匿名EventHandler的方式下,无法分离EventHandler。但是我们可以通过将方法赋值给一个变量的方式来解决这个问题,然后使用该变量来添加或移除事件。然而,这样做会失去闭包通常给你的“自然”感觉。

0