什么是轻量级活动?

时间:2010-05-04 06:10:46

标签: c# events

lightweight event这个词中跑了几次。文本没有附带任何代码片段来弄清楚这个术语背后的想法 如果有人能解释什么是轻量级事件并抛出示例,我将非常感激。

1 个答案:

答案 0 :(得分:4)

当您将事件处理程序添加到事件(或实际上是委托的方法组)时,委托将保存对方法组所在对象的引用(如果它是实例方法)。

换句话说,触发事件的对象将保留在订阅事件时接收事件的对象。

因此,如果你完成了使用那个正在接收事件的对象,它仍然存在(并响应事件),即使你已完成它并释放所有引用(没有取消订阅)。

这导致了对lightweight events的渴望,{{1}}是不能保留参考的事件。

默认情况下,.NET框架中提供 ,因此如果您想实现此功能,则必须使用add and remove accessors when declaring your eventWeakReference用于存储通过隐式值参数传递的委托。

然后,当你触发事件时,你会检查你的WeakReference集合(你必须单独维护它),特别是IsAliveTarget属性来确定代表是否已经集。如果没有,那么你会执行它,否则,你会通过它(并压缩你的列表,很可能)。