2010-05-04 90 views
3

少數幾次進入術語lightweight event。該文本沒有附帶任何代碼片段來找出該術語背後的想法。
我真的很感激,如果任何人都可以解釋什麼是輕量級事件,並拋出一個例子。什麼是輕量級事件?

+1

一個很好的引導學習更多的是這裏 http://stackoverflow.com/questions/185931/weakreference-and-event-handling – fostandy 2010-05-13 06:33:15

回答

4

當您將一個事件處理程序添加到一個事件(或一個方法組到真的)時,如果它是一個實例方法,委託將保存方法組所在對象的引用。

換句話說,觸發事件的對象將保持在您訂閱該事件時接收事件的對象上。因此,如果您完成了使用接收事件的對象,即使您已完成並釋放所有引用(不退訂),它仍然保持(並響應事件)。

這導致對lightweight events的期望,這是不保留在引用上的事件。

這是默認情況下不使用.NET框架提供外的開箱,所以如果你想實現這一點,你將不得不使用沿着add and remove accessors when declaring your eventWeakReference存儲傳遞委託通過隱式值參數。

然後,當您觸發事件時,您需要檢查您的WeakReference集合(您必須單獨維護)以確定代理是否已收集。如果沒有,那麼你會執行它,否則,你會通過它(並壓縮你的列表,最有可能)。

+0

+1。很好的答案 - 非常簡潔明瞭。消化解釋之後,我意識到我在[Richter](http://www.amazon.com/gp/product/0735614229?ie=UTF8&tag=ssm0a-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0735614229)中瞭解了這一點。 – 2010-05-05 06:26:15