public override void TryClose(bool?dialogResult = default(bool?)) { var shell = IoC.Get <IShell>(); var propertyTool = shell.Tools.FirstOrDefault(t => t is IPropertyGrid); if (propertyTool != null && _shouldClosePropertyGridOnDeactivate) { shell.Tools.Remove(propertyTool); } Result.Clear(); Result = null; _propertyInfo = null; base.TryClose(dialogResult); }
private void SubscribeToJob() { var job = default(JobModelProxy); Task.Run(() => { try { //AsyncExecution.Run(ThreadPriority.Normal, () => // Wait for the job ID to be set by our backend service while (_jobId == Guid.Empty) { if (_runbookViewModel.Runbook.JobID != null) { _jobId = _runbookViewModel.Runbook.JobID; } Thread.Sleep(1 * 1000); } if (_runbookViewModel.Runbook.JobID != null && _runbookViewModel.Runbook.JobID != Guid.Empty) { job = _backendService.GetJobDetails(_runbookViewModel.Runbook); } else if (_jobId != Guid.Empty) { job = _backendService.GetJobDetails(_jobId); } if (job != null) { Execute.OnUIThread(() => { foreach (var entry in job.Result) { Result.Add(entry); } JobStatus = job.JobStatus; NotifyOfPropertyChange(() => DisplayName); _propertyInfo = new ExecutionResultPropertyInfo(); _propertyInfo.JobID = (_jobId == null) ? Guid.Empty : (Guid)_jobId; _propertyInfo.RunbookID = (_runbookViewModel != null) ? ((RunbookModelProxy)_runbookViewModel.Model).RunbookID : Guid.Empty; _propertyInfo.RunbookName = (_runbookViewModel != null) ? ((RunbookModelProxy)_runbookViewModel.Model).RunbookName : "Unknown"; _propertyInfo.JobStatus = job.JobStatus; _propertyInfo.StartTime = job.StartTime; _propertyInfo.EndTime = job.EndTime; _propertyInfo.CreationTime = job.CreationTime; _propertyInfo.LastModifiedTime = job.LastModifiedTime; _propertyInfo.ErrorCount = job.ErrorCount; _propertyInfo.WarningCount = job.WarningCount; _propertyInfo.Exception = job.JobException; if (!string.IsNullOrEmpty(job.JobException)) { _output.AppendLine("Error when executing runbook:"); _output.AppendLine(job.JobException); _output.AppendLine(" "); } _inspectorTool.SelectedObject = _propertyInfo; }); } bool hasDisplayedException = false; while (!_completedExecutionStatus.Contains(job.JobStatus)) { job = _backendService.GetJobDetails(_runbookViewModel.Runbook); if (job != null) { Execute.OnUIThread(() => { JobStatus = job.JobStatus; NotifyOfPropertyChange(() => DisplayName); _propertyInfo.StartTime = job.StartTime; _propertyInfo.EndTime = job.EndTime; _propertyInfo.ErrorCount = job.ErrorCount; _propertyInfo.WarningCount = job.WarningCount; _propertyInfo.JobStatus = job.JobStatus; _propertyInfo.Exception = job.JobException; if (!String.IsNullOrEmpty(job.JobException) && !hasDisplayedException) { _output.AppendLine("Error when executing runbook:"); _output.AppendLine(job.JobException); _output.AppendLine(" "); hasDisplayedException = true; } _inspectorTool.SelectedObject = null; _inspectorTool.SelectedObject = _propertyInfo; foreach (var entry in job.Result) { Result.Add(entry); } }); } Thread.Sleep(5 * 1000); } // The job is completed _runbookViewModel.Runbook.JobID = Guid.Empty; LongRunningOperation.Stop(); } catch (Exception ex) { GlobalExceptionHandler.Show(ex); _runbookViewModel.Runbook.JobID = Guid.Empty; job.JobStatus = "Failed"; } }); if (job != null) { var output = IoC.Get <IOutput>(); output.AppendLine("Job executed with status: " + job.JobStatus); } }