AvaloniaNativeDeferredRendererLock.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // Copyright (c) The Avalonia Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System;
  4. using System.Threading;
  5. using Avalonia.Native.Interop;
  6. using Avalonia.Rendering;
  7. namespace Avalonia.Native
  8. {
  9. public class AvaloniaNativeDeferredRendererLock : IDeferredRendererLock
  10. {
  11. private readonly IAvnWindowBase _window;
  12. public AvaloniaNativeDeferredRendererLock(IAvnWindowBase window)
  13. {
  14. _window = window;
  15. }
  16. public IDisposable TryLock()
  17. {
  18. if (_window.TryLock())
  19. return new UnlockDisposable(_window);
  20. return null;
  21. }
  22. private sealed class UnlockDisposable : IDisposable
  23. {
  24. private IAvnWindowBase _window;
  25. public UnlockDisposable(IAvnWindowBase window)
  26. {
  27. _window = window;
  28. }
  29. public void Dispose()
  30. {
  31. Interlocked.Exchange(ref _window, null)?.Unlock();
  32. }
  33. }
  34. }
  35. }