public Task <DialogResult?> Show <TUserControl>(BaseDialogViewModel viewModel) where TUserControl : UserControl, new () { // create control var control = new TUserControl { DataContext = viewModel }; var completionSource = new TaskCompletionSource <DialogResult?>(); var dialog = new Dialog(completionSource, this); // pass dialog for remote control viewModel.Dialog = dialog; // ReSharper disable once InvertIf if (!_IsDialogControlFree() || _dialogQueue.Count != 0) { // add dialog content to show queue var internalDialog = new _InternalDialog { Content = control }; _dialogQueue.Enqueue(internalDialog); #if DEBUG Console.WriteLine($@"{nameof(IDialogSystemBase)}.{nameof(Show)}.queueCount={_dialogQueue.Count}"); // queue overflow if (_dialogQueue.Count > QUEUE_SIZE) { throw new Exception("Dialog queue overflow!"); } #else #endif } else { // initial setup _SetupDialog(control); } return(completionSource.Task); }
public Task <DialogResult?> Show <TUserControl>(BaseDialogViewModel viewModel) where TUserControl : UserControl, new() { return(_dialogSystem.Show <TUserControl>(viewModel)); }