事件处理程序是否使对象保持活动状态?

时间:2013-11-13 13:49:09

标签: c# events weak-references

我有以下情况。

List<WeakReference<MyClass>>MyClass有一个名为MyEvent的事件。我遍历列表,对于每个活着的引用,我可能会在它的目标上调用MyEvent

在我的代码的其他部分,我保留对这些对象的实时引用。让我们说这个过程看起来像这样:

var list = new List<WeakReference<MyClass>>();
var a = new MyClass();
a.MyEvent += delegate {
    DoSomeStuff(a);
};
list.Add(new WeakReference<MyClass>(a));

现在假设我没有进一步使用a,并决定处置它。现在,a = null

我有一个定期检查设置,清除原始的死引用列表。我想知道的是,我连接的这个事件处理程序是否会使a的{​​{1}}实例保持活动状态,从而阻止我从列表中清除它?

如果事件不仅仅是正常的MyClass,而是将Action作为参数传递给处理程序,该怎么办?在某种程度上,该处理程序仍然具有对原始对象的引用,即使处理程序可能永远不会被调用。

这可能是非常明显的,我可以想到类似的情况,我知道答案,但事实上,我在这个对象上挂钩这个功能让我很怀疑。如果确实让它保持活力,那么它就会破坏我的整个系统,所以我需要知道。

0 个答案:

没有答案