Browse Source

fix affectsrender memory leak with WeakEventHandlerManager

pull/2331/head
Dan Walmsley 8 years ago
parent
commit
556c1373e1
  1. 6
      src/Avalonia.Visuals/Visual.cs

6
src/Avalonia.Visuals/Visual.cs

@ -11,6 +11,7 @@ using Avalonia.Logging;
using Avalonia.LogicalTree; using Avalonia.LogicalTree;
using Avalonia.Media; using Avalonia.Media;
using Avalonia.Rendering; using Avalonia.Rendering;
using Avalonia.Utilities;
using Avalonia.VisualTree; using Avalonia.VisualTree;
namespace Avalonia namespace Avalonia
@ -343,16 +344,17 @@ namespace Avalonia
{ {
void Invalidate(AvaloniaPropertyChangedEventArgs e) void Invalidate(AvaloniaPropertyChangedEventArgs e)
{ {
if (e.Sender is T sender) if (e.Sender is T sender)
{ {
if (e.OldValue is IAffectsRender oldValue) if (e.OldValue is IAffectsRender oldValue)
{ {
oldValue.Invalidated -= sender.AffectsRenderInvalidated; WeakEventHandlerManager.Unsubscribe<EventArgs, T>(oldValue, nameof(oldValue.Invalidated), sender.AffectsRenderInvalidated);
} }
if (e.NewValue is IAffectsRender newValue) if (e.NewValue is IAffectsRender newValue)
{ {
newValue.Invalidated += sender.AffectsRenderInvalidated; WeakEventHandlerManager.Subscribe<IAffectsRender, EventArgs, T>(newValue, nameof(newValue.Invalidated), sender.AffectsRenderInvalidated);
} }
sender.InvalidateVisual(); sender.InvalidateVisual();

Loading…
Cancel
Save