diff --git a/osu.Game/Overlays/Mods/ModSection.cs b/osu.Game/Overlays/Mods/ModSection.cs index 4c44aad87d..ba83af9f28 100644 --- a/osu.Game/Overlays/Mods/ModSection.cs +++ b/osu.Game/Overlays/Mods/ModSection.cs @@ -10,6 +10,7 @@ using System; using System.Linq; using System.Collections.Generic; +using System.Threading; using osu.Framework.Input.Events; using osu.Game.Graphics; @@ -33,6 +34,8 @@ public string Header public IEnumerable SelectedMods => buttons.Select(b => b.SelectedMod).Where(m => m != null); + private CancellationTokenSource modsLoadCts; + public IEnumerable Mods { set @@ -48,7 +51,9 @@ public IEnumerable Mods }; }).ToArray(); - ButtonsContainer.Children = modContainers; + modsLoadCts?.Cancel(); + LoadComponentsAsync(modContainers, c => ButtonsContainer.ChildrenEnumerable = c, (modsLoadCts = new CancellationTokenSource()).Token); + buttons = modContainers.OfType().ToArray(); if (value.Any())