Dot-Net
WPF 應用程序中使用的“弱事件”模式是什麼?
WindowsBaseDLL 使用摘要定義事件IWeakEventListener:為希望通過 WeakEvent 模式和 System.Windows.WeakEventManager 接收事件的類提供事件偵聽支持。
這種模糊的描述並沒有描述“弱事件模式”實際上是什麼。
那麼,這種模式是什麼,為什麼要使用它,它在 WPF 應用程序之外有用嗎?
編輯已經有一些很好的答案,但沒有人談論過這種模式在 WPF 應用程序之外是否有用。在我看來,弱事件模式(如依賴屬性)與 WPF API 和 DLL 有著千絲萬縷的聯繫。是否有可用於非 WPF 應用程序的等效實現?
重要的一點在註釋中:
遵循 WeakEvent 模式的主要原因是事件源的對像生命週期可能獨立於事件偵聽器。使用 WeakEventManager 的中央事件調度允許偵聽器的處理程序被垃圾收集,即使源對象仍然存在
所以如果你有
publisher和subscriber對象,那麼通常在subscriber訂閱了publisher’s 事件之後,subscriber就不能被垃圾回收了。弱事件模式使兩個“弱”之間的連結(如在WeakReference中),因此不存在這種依賴關係。subscriber(另一種方法是在想要有資格進行垃圾收集時取消訂閱該事件,但這會變得混亂。)