// perform the user selected action internal async void PerformAction(DetailControl detailControl) { ActivateOutputWindow(); _outputConsole.Clear(); var progressDialog = new ProgressDialog(_outputConsole); progressDialog.Owner = Window.GetWindow(this); progressDialog.WindowStartupLocation = WindowStartupLocation.CenterOwner; progressDialog.FileConflictAction = detailControl.FileConflictAction; progressDialog.Show(); try { var actions = await detailControl.ResolveActionsAsync(progressDialog); // show preview var model = (DetailControlModel)_packageDetail.DataContext; if (model.Options.ShowPreviewWindow) { var shouldContinue = PreviewActions(actions); if (!shouldContinue) { return; } } // show license agreeement bool acceptLicense = ShowLicenseAgreement(actions); if (!acceptLicense) { return; } // Create the executor and execute the actions var userAction = detailControl.GetUserAction(); var executor = new ActionExecutor(); await Task.Run( () => { executor.ExecuteActions(actions, progressDialog, userAction); }); UpdatePackageStatus(); detailControl.Refresh(); } catch (Exception ex) { var errorDialog = new ErrorReportingDialog( ex.Message, ex.ToString()); errorDialog.ShowModal(); } finally { progressDialog.CloseWindow(); } }