using System; using System.Collections.Generic; namespace BITKit { public interface IDoubleBuffer { T Current { get; } void Release(T newValue); event Action OnRelease; bool TryGetRelease(out T result); } public class DoubleBuffer : IDoubleBuffer { public T Current { get; // ReSharper disable once MemberCanBePrivate.Global protected set; } public void Release(T newValue) { Current = newValue; OnRelease?.Invoke(newValue); } public event Action OnRelease; private readonly Queue _releases = new(); public bool TryGetRelease(out T result) { return _releases.TryDequeue(out result); } } }