Пример #1
0
        protected void ForeachWithWaitIndicatorAndErrorReport(IReadOnlyList <ProjectViewModel> projects,
                                                              string verb,
                                                              Func <ProjectViewModel, HResult> action,
                                                              bool breakOnFirstError = true)
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            try {
                bool allowCancel = projects.Count > 1;

                using var indicator = WaitIndicator.StartWait("Project Explorer", "", allowCancel);
                for (int i = 0; i < projects.Count; i++)
                {
                    var project = projects[i];

                    indicator.Message = $"{verb} project '{project.DisplayName}'.";

                    indicator.CancellationToken.ThrowIfCancellationRequested();

                    if (i == projects.Count - 1)
                    {
                        indicator.AllowCancel = false;
                    }

                    if (ShellUtil.ReportUserOnFailed(action(project).Value) && breakOnFirstError)
                    {
                        break;
                    }
                }
            } catch (OperationCanceledException) {
            }
        }
Пример #2
0
        protected override void ExecuteOverride(IReadOnlyList <ProjectViewModel> projects)
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            if (ShellUtil.ReportUserOnFailed(ViewModel.EnsureSolution().Value))
            {
                return;
            }

            ForeachWithWaitIndicatorAndErrorReport(projects, "Adding", p => p.Open());
        }
Пример #3
0
        protected override void ExecuteOverride(IReadOnlyList <ProjectViewModel> projects)
        {
            ThreadHelper.ThrowIfNotOnUIThread();

            string itemsList = string.Join(", ", projects.Select(project => $"'{project.DisplayName}'"));

            if (!ShellUtil.ConfirmOkCancel($"{itemsList}{(projects.Count == 1 ? " " : "\r\n")}will be removed."))
            {
                return;
            }

            ForeachWithWaitIndicatorAndErrorReport(projects, "Removing", p => p.Close());
        }