|
|
@@ -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);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// Tries to lock the target surface or window
|
|
|
/// </summary>
|
|
|
@@ -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);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|