private void RemoveToast(Guid toastId) { InvokeAsync(async() => { await displayedToastsSemaphore.WaitAsync(); try { var toastInstance = DisplayedToasts.SingleOrDefault(x => x.Id == toastId); if (toastInstance is null) { return; } toastInstance.Settings.Status = ToastStatus.Hide; if (DisplayedToasts.Where(x => x.Settings.Status == ToastStatus.FadeOut).Count() == 0) { DisplayedToasts.RemoveAll(x => x.Settings.Status == ToastStatus.Hide); } StateHasChanged(); FlushPendingToasts(); } finally { displayedToastsSemaphore.Release(); } }); }
private void FlushPendingToasts() { bool FlushNext() => PendingToasts.Count() > 0 && (ToastService.Configuration.MaxToastsShowing <= 0 || DisplayedToasts.Where(t => t.Settings.Status != ToastStatus.Hide).Count() < ToastService.Configuration.MaxToastsShowing); while (FlushNext()) { var toastInstance = PendingToasts.Dequeue(); DisplayedToasts.Add(toastInstance); if (toastInstance.Settings.AppliedCloseMethod != MBToastCloseMethod.CloseButton) { InvokeAsync(() => { var timeout = toastInstance.Settings.AppliedTimeout; var toastTimer = new System.Timers.Timer(toastInstance.Settings.AppliedTimeout); toastTimer.Elapsed += (sender, args) => { CloseToast(toastInstance.Id); }; toastTimer.AutoReset = false; toastTimer.Start(); }); } } StateHasChanged(); }