using Avalonia.Threading; namespace AcDream.Launcher.ViewModels; public interface IUiDispatcher { void Post(Action action); } public sealed class AvaloniaUiDispatcher : IUiDispatcher { public void Post(Action action) { ArgumentNullException.ThrowIfNull(action); Dispatcher.UIThread.Post(action); } } public sealed class ImmediateUiDispatcher : IUiDispatcher { public void Post(Action action) { ArgumentNullException.ThrowIfNull(action); action(); } }