Browse Source

Do not capture this when creating _drawOperationsRefCounter.

Dariusz Komosinski 6 years ago
parent
commit
3d6b4a875b
1 changed files with 16 additions and 11 deletions
  1. 16 11
      src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs

+ 16 - 11
src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs

@@ -327,31 +327,36 @@ namespace Avalonia.Rendering.SceneGraph
             if (_drawOperations == null)
             {
                 _drawOperations = new List<IRef<IDrawOperation>>();
-                _drawOperationsRefCounter = RefCountable.Create(Disposable.Create(DisposeDrawOperations));
+                _drawOperationsRefCounter = RefCountable.Create(CreateDisposeDrawOperations(_drawOperations));
                 _drawOperationsCloned = false;
             }
             else if (_drawOperationsCloned)
             {
                 _drawOperations = new List<IRef<IDrawOperation>>(_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<IRef<IDrawOperation>> 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;
         }
     }
 }