diff --git a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs index 2fb8e84a2e..71e364ffc9 100644 --- a/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs +++ b/src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs @@ -327,31 +327,36 @@ namespace Avalonia.Rendering.SceneGraph if (_drawOperations == null) { _drawOperations = new List>(); - _drawOperationsRefCounter = RefCountable.Create(Disposable.Create(DisposeDrawOperations)); + _drawOperationsRefCounter = RefCountable.Create(CreateDisposeDrawOperations(_drawOperations)); _drawOperationsCloned = false; } else if (_drawOperationsCloned) { _drawOperations = new List>(_drawOperations.Select(op => op.Clone())); _drawOperationsRefCounter.Dispose(); - _drawOperationsRefCounter = RefCountable.Create(Disposable.Create(DisposeDrawOperations)); + _drawOperationsRefCounter = RefCountable.Create(CreateDisposeDrawOperations(_drawOperations)); _drawOperationsCloned = false; } } - public bool Disposed { get; } - - public void Dispose() + private static IDisposable CreateDisposeDrawOperations(List> drawOperations) { - _drawOperationsRefCounter?.Dispose(); + return Disposable.Create(() => + { + foreach (var operation in drawOperations) + { + operation.Dispose(); + } + }); } - private void DisposeDrawOperations() + public bool Disposed { get; private set; } + + public void Dispose() { - foreach (var operation in DrawOperations) - { - operation.Dispose(); - } + _drawOperationsRefCounter?.Dispose(); + + Disposed = true; } } }