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));
 }