using System.Collections.ObjectModel; using Avalonia.Threading; namespace StabilityMatrix.Avalonia.Diagnostics.LogViewer.Core.Logging; public class LogDataStore : ILogDataStore { public static LogDataStore Instance { get; } = new(); #region Fields private static readonly SemaphoreSlim _semaphore = new(initialCount: 1); #endregion #region Properties public ObservableCollection Entries { get; } = new(); #endregion #region Methods public virtual void AddEntry(LogModel logModel) { // ensure only one operation at time from multiple threads _semaphore.Wait(); Dispatcher.UIThread.Post(() => { Entries.Add(logModel); }); _semaphore.Release(); } #endregion }