internal async Task CloseSubMenuAsync(SubMenuOption option) { await option.SubMenu.TopMenu.SemaphoreSlim.WaitAsync(); try { if (!option.IsShow) { return; } option.IsShow = false; if (GlobalBlazuiSettings.DisableAnimation) { await InvokeAsync(option.SubMenu.DeActivate); PopupService.SubMenuOptions.Remove(option); return; } await InvokeAsync(StateHasChanged); await Task.Delay(200); await InvokeAsync(option.SubMenu.DeActivate); PopupService.SubMenuOptions.Remove(option); } finally { option.SubMenu.TopMenu.SemaphoreSlim.Release(); } }
protected async Task OnOverAsync() { if (TopMenu.Mode == MenuMode.Horizontal) { await SemaphoreSlim.WaitAsync(); try { if (IsOpened) { try { if (subMenuOption != null && subMenuOption.ClosingTask != null && subMenuOption.ClosingTask.Status != TaskStatus.RanToCompletion && subMenuOption.ClosingTask.Status != TaskStatus.Canceled) { subMenuOption.ClosingTaskCancellationTokenSource.Cancel(); } } catch (ObjectDisposedException) { } return; } subMenuOption = new SubMenuOption() { SubMenu = this, Content = ChildContent, Options = Options, Target = Element }; var taskCompletionSource = new TaskCompletionSource <int>(); subMenuOption.TaskCompletionSource = taskCompletionSource; while (PopupService.SubMenuOptions.Any()) { await Task.Delay(50); } PopupService.SubMenuOptions.Add(subMenuOption); IsOpened = true; } finally { SemaphoreSlim.Release(); } await subMenuOption.TaskCompletionSource.Task; borderColor = "transparent"; IsOpened = false; await OnOutAsync(); } else { backgroundColor = Options.HoverColor; textColor = Options.ActiveTextColor; isActive = true; } }
internal async Task CloseSubMenuAsync(SubMenuOption option) { option.IsShow = false; //option.HideStatus = AnimationStatus.Begin; StateHasChanged(); await Task.Delay(200); //option.HideStatus = AnimationStatus.End; //StateHasChanged(); //await Task.Delay(200); PopupService.SubMenuOptions.Remove(option); option.TaskCompletionSource.TrySetResult(0); }
internal async Task ReadyCloseSubMenuAsync(SubMenuOption option) { option.ClosingTaskCancellationTokenSource = new System.Threading.CancellationTokenSource(); var task = Task.Delay(200, option.ClosingTaskCancellationTokenSource.Token).ContinueWith(async task => { if (task.IsCanceled) { DisposeTokenSource(option.ClosingTaskCancellationTokenSource); return; } DisposeTokenSource(option.ClosingTaskCancellationTokenSource); await CloseSubMenuAsync(option); }); option.ClosingTask = await task; }
internal void ReadyCloseSubMenu(SubMenuOption option) { if (option.CancelClose) { option.CancelClose = false; return; } option.Closing = true; Task.Delay(500).ContinueWith(task => { if (!option.Closing) { return; } _ = CloseSubMenuAsync(option); }); }
protected async Task OnOverAsync() { if (TopMenu.Mode == MenuMode.Horizontal) { if (isOpened && subMenuOption.Closing) { subMenuOption.Closing = false; return; } var taskCompletionSource = new TaskCompletionSource <int>(); subMenuOption = new SubMenuOption() { SubMenu = this, Content = ChildContent, Options = Options, Target = Element, Closing = false, TaskCompletionSource = taskCompletionSource }; var prevMenuOption = PopupService.SubMenuOptions.FirstOrDefault(); if (prevMenuOption != null) { await prevMenuOption.Close(prevMenuOption); } PopupService.SubMenuOptions.Add(subMenuOption); isOpened = true; await taskCompletionSource.Task; borderColor = "transparent"; isOpened = false; OnOut(); } else { backgroundColor = Options.HoverColor; textColor = Options.ActiveTextColor; isActive = true; } //opened = true; }
internal void ShowSubMenu(SubMenuOption option) { option.Closing = false; }
internal void KeepShowSubMenu(SubMenuOption option) { CancelTokenSource(option.ClosingTaskCancellationTokenSource); }