KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Is it possible to create a weak event listener on a static event using WeakEventManager? I would like to create a weak event listener on the static CompositionTarget.Rendering event to avoid memory leaks when I don't know the lifetime of the WPF/Silverlight source element. I implemented the rendering event manager by the weak event pattern : public class RenderingEventManager : WeakEventManager { public static void AddListener(IWeakEventListener listener) { CurrentManager.ProtectedAddListener(null, listener); } public static void RemoveListener(IWeakEventListener listener) { CurrentManager.ProtectedRemoveListener(null, listener); } private static RenderingEventManager CurrentManager { get { var managerType = typeof(RenderingEventManager); var manager = (RenderingEventManager)GetCurrentManager(managerType); if (manager == null) { manager = new RenderingEventManager(); SetCurrentManager(managerType, manager); } return manager; } } protected sealed override void StartListening(object source) { CompositionTarget.Rendering += this.OnCompositionTargetRendering; } protected sealed override void StopListening(object source) { CompositionTarget.Rendering -= this.OnCompositionTargetRendering; } void OnCompositionTargetRendering(object sender, EventArgs e) { this.DeliverEvent(sender, e); } } and tested the manager in a simple window: public partial class Window1 : Window, IWeakEventListener { public Window1() { InitializeComponent(); RenderingEventManager.AddListener(this); } bool IWeakEventListener.ReceiveWeakEvent(Type managerType, object sender, EventArgs e) {
Tags (comma-separated)
Save Edits
Cancel