Browse Source

Do not capture this when creating _drawOperationsRefCounter.

pull/2321/head
Dariusz Komosinski 8 years ago
parent
commit
3d6b4a875b
  1. 27
      src/Avalonia.Visuals/Rendering/SceneGraph/VisualNode.cs

27
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;
}
}
}

Loading…
Cancel
Save