public void UpdateStatus(SimulationStatusUpdate status) { Dispatcher.Invoke(() => { ProgressDivider.Content = status.number + "/" + this.atomic_engine.atomic_runnables.Count + " " + status.message; ProgressBar.Value = status.number; }); }
public async Task <Report> RunCleanup(MainWindow window) { Report report = new Report { started = DateTime.Now, results = new List <ReportEntry>(), finished = DateTime.Now }; int i = 0; foreach (AtomicRunnable atomic in this.atomic_runnables) { string[] commands; if (atomic.cleanup_command == null) { continue; } else { commands = new string[1]; commands[0] = atomic.cleanup_command; } foreach (string command in commands) { if (command == "") { continue; } SimulationStatusUpdate status = new SimulationStatusUpdate { number = i, message = "Running Cleanup " + atomic.attack_technique + ": " + command }; window.UpdateStatus(status); ReportEntry entry = new ReportEntry { time = DateTime.Now.ToString("u"), command = command, display_name = atomic.display_name, attack_technique = atomic.attack_technique, success = false }; try { string exitcode = Utils.RunCommandInBackground(command, atomic.type); entry.error = exitcode; entry.success = true; } catch (Exception e) { entry.error = e.Message; } report.results.Add(entry); } Thread.Sleep(100); i++; Utils.ReportToCsv(report, window.output_dir); } report.finished = DateTime.Now; SimulationStatusUpdate finalstatus = new SimulationStatusUpdate { number = i, message = "Completed!" }; window.UpdateStatus(finalstatus); return(report); }