public void ApplyChanges() { IVsTaskStatusCenterService taskCenter = Package.GetGlobalService(typeof(SVsTaskStatusCenterService)) as IVsTaskStatusCenterService; ITaskHandler taskHandler = taskCenter.PreRegister( new TaskHandlerOptions() { Title = "Updating sdks..." }, new TaskProgressData()); if (model.SdkChangesCollector.SdksToRemove.Count > 0) { RemoveSdkViewModel dialogVM = new RemoveSdkViewModel(model.SdkChangesCollector.SdksToRemove); RemoveSdkDialog dialog = new RemoveSdkDialog(dialogVM); bool?result = dialog.ShowModal(); if (result == null || result == false) { return; } if (dialogVM.RemoveFromDisk) { foreach (string path in model.SdkChangesCollector.SdksToRemove) { Directory.Delete(path, true); } } } taskHandler.RegisterTask(Task.Run(async() => { foreach (string sdk in model.SdkChangesCollector.SdksToRemove) { ITaskHandler subTaskHandler = taskCenter.PreRegister( new TaskHandlerOptions() { Title = $"Removing sdk {sdk}" }, new TaskProgressData()); Task task = Task.Run(() => { try { plcncliCommunication.ExecuteCommand("set setting", null, null, "-r", "SdkPaths", $"\"{sdk}\""); } catch (PlcncliException e) { MessageBox.Show(e.Message, "PLCnCLI error"); } }); subTaskHandler.RegisterTask(task); await task; } foreach (string sdk in model.SdkChangesCollector.SdksToAdd) { ITaskHandler subTaskHandler = taskCenter.PreRegister( new TaskHandlerOptions() { Title = $"Adding sdk {sdk}" }, new TaskProgressData()); Task task = Task.Run(() => { try { plcncliCommunication.ExecuteCommand("set setting", null, null, "-a", "SdkPaths", $"\"{sdk}\""); } catch (PlcncliException e) { MessageBox.Show(e.Message, "PLCnCLI error"); } }); subTaskHandler.RegisterTask(task); await task; } foreach (InstallSdk sdk in model.SdkChangesCollector.SdksToInstall) { ITaskHandler subTaskHandler = taskCenter.PreRegister( new TaskHandlerOptions() { Title = $"Installing sdk {sdk.ArchiveFile} to {sdk.Destination}" }, new TaskProgressData()); Task task = Task.Run(() => { try { plcncliCommunication.ExecuteCommand("install sdk", null, null, "--path", $"\"{sdk.ArchiveFile}\"", "--destination", $"\"{sdk.Destination}\"", sdk.Force ? "--force" : ""); } catch (PlcncliException e) { MessageBox.Show(e.Message, "PLCnCLI error"); } }); subTaskHandler.RegisterTask(task); await task; } })); if (model.SdkChangesCollector.SdksToInstall.Count > 0) { MessageBox.Show("Installing sdks in background. This may take a while. New sdks are available after background task has finished." + " Check lower left corner for active background tasks.", "Background installation started", MessageBoxButton.OK, MessageBoxImage.Information); } }
public RemoveSdkDialog(RemoveSdkViewModel viewModel) { DataContext = viewModel; InitializeComponent(); }