From 556c1373e119846d56baab5fbf580e9eba937a91 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Tue, 26 Feb 2019 14:28:11 +0000 Subject: [PATCH] fix affectsrender memory leak with WeakEventHandlerManager --- src/Avalonia.Visuals/Visual.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Visuals/Visual.cs b/src/Avalonia.Visuals/Visual.cs index bf282db72f..d9b21237ae 100644 --- a/src/Avalonia.Visuals/Visual.cs +++ b/src/Avalonia.Visuals/Visual.cs @@ -11,6 +11,7 @@ using Avalonia.Logging; using Avalonia.LogicalTree; using Avalonia.Media; using Avalonia.Rendering; +using Avalonia.Utilities; using Avalonia.VisualTree; namespace Avalonia @@ -343,16 +344,17 @@ namespace Avalonia { void Invalidate(AvaloniaPropertyChangedEventArgs e) { + if (e.Sender is T sender) { if (e.OldValue is IAffectsRender oldValue) { - oldValue.Invalidated -= sender.AffectsRenderInvalidated; + WeakEventHandlerManager.Unsubscribe(oldValue, nameof(oldValue.Invalidated), sender.AffectsRenderInvalidated); } if (e.NewValue is IAffectsRender newValue) { - newValue.Invalidated += sender.AffectsRenderInvalidated; + WeakEventHandlerManager.Subscribe(newValue, nameof(newValue.Invalidated), sender.AffectsRenderInvalidated); } sender.InvalidateVisual();