csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.1 KiB
42 lines
1.1 KiB
// Copyright (c) The Avalonia Project. All rights reserved.
|
|
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
|
|
|
using System;
|
|
using System.Threading;
|
|
using Avalonia.Native.Interop;
|
|
using Avalonia.Rendering;
|
|
|
|
namespace Avalonia.Native
|
|
{
|
|
public class AvaloniaNativeDeferredRendererLock : IDeferredRendererLock
|
|
{
|
|
private readonly IAvnWindowBase _window;
|
|
|
|
public AvaloniaNativeDeferredRendererLock(IAvnWindowBase window)
|
|
{
|
|
_window = window;
|
|
}
|
|
|
|
public IDisposable TryLock()
|
|
{
|
|
if (_window.TryLock())
|
|
return new UnlockDisposable(_window);
|
|
return null;
|
|
}
|
|
|
|
private sealed class UnlockDisposable : IDisposable
|
|
{
|
|
private IAvnWindowBase _window;
|
|
|
|
public UnlockDisposable(IAvnWindowBase window)
|
|
{
|
|
_window = window;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Interlocked.Exchange(ref _window, null)?.Unlock();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|