private void DeleteSelectedSecurityGroups(object argument) { var result = MessageBox.Show("This will delete the selected security groups. Are you sure you want to continue?", "Confirm Delete", MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result == MessageBoxResult.Yes) { var securityGroupsToDelete = this.SelectedSecurityGroups.ToList(); var task = new ApplicationTask("Deleting security groups", securityGroupsToDelete.Count, true); PublishStatus(new StatusEventArgs(task)); var worker = new BackgroundWorker(); worker.DoWork += (sender, e) => { var tfs = GetSelectedTfsTeamProjectCollection(); var securityService = tfs.GetService <IIdentityManagementService>(); var step = 0; var count = 0; foreach (var securityGroup in securityGroupsToDelete) { task.SetProgress(step++, string.Format(CultureInfo.CurrentCulture, "Deleting security group \"{0}\" in Team Project \"{1}\"", securityGroup.Name, securityGroup.TeamProject.Name)); try { securityService.DeleteApplicationGroup(IdentityHelper.CreateTeamFoundationDescriptor(securityGroup.Sid)); count++; } catch (Exception exc) { task.SetWarning(string.Format(CultureInfo.CurrentCulture, "An error occurred while deleting security group \"{0}\" in Team Project \"{1}\"", securityGroup.Name, securityGroup.TeamProject.Name), exc); } if (task.IsCanceled) { task.Status = "Canceled"; break; } } e.Result = count; }; worker.RunWorkerCompleted += (sender, e) => { if (e.Error != null) { Logger.Log("An unexpected exception occurred while deleting security groups", e.Error); task.SetError(e.Error); task.SetComplete("An unexpected exception occurred"); } else { var count = (int)e.Result; task.SetComplete("Deleted " + count.ToCountString("security group")); } // Refresh the list. GetSecurityGroups(null); }; worker.RunWorkerAsync(); } }