diff --git a/src/Avalonia.Visuals/Rendering/ManagedDeferredRendererLock.cs b/src/Avalonia.Visuals/Rendering/ManagedDeferredRendererLock.cs index 2d4a39e026..1295961a1b 100644 --- a/src/Avalonia.Visuals/Rendering/ManagedDeferredRendererLock.cs +++ b/src/Avalonia.Visuals/Rendering/ManagedDeferredRendererLock.cs @@ -1,5 +1,4 @@ using System; -using System.Reactive.Disposables; using System.Threading; namespace Avalonia.Rendering @@ -7,7 +6,13 @@ namespace Avalonia.Rendering public class ManagedDeferredRendererLock : IDeferredRendererLock { private readonly object _lock = new object(); - + private readonly LockDisposable _lockDisposable; + + public ManagedDeferredRendererLock() + { + _lockDisposable = new LockDisposable(_lock); + } + /// /// Tries to lock the target surface or window /// @@ -15,7 +20,7 @@ namespace Avalonia.Rendering public IDisposable TryLock() { if (Monitor.TryEnter(_lock)) - return Disposable.Create(() => Monitor.Exit(_lock)); + return _lockDisposable; return null; } @@ -25,7 +30,22 @@ namespace Avalonia.Rendering public IDisposable Lock() { Monitor.Enter(_lock); - return Disposable.Create(() => Monitor.Exit(_lock)); + return _lockDisposable; + } + + private class LockDisposable : IDisposable + { + private readonly object _lock; + + public LockDisposable(object @lock) + { + _lock = @lock; + } + + public void Dispose() + { + Monitor.Exit(_lock); + } } } }