private void OnSearchExceptionRise(FileOperationException e) { if (entries.Count == 0) { pane.Status = JobStatus.Running; } entries.Add(new ErrorEntry(e.Message, e.InnerException.GetType().ToString())); }
private void JobChangeHandler(IJobView jobView, JobChangeEvent changeEvent) { switch (changeEvent) { case JobChangeEvent.Enqueued: pane.JobsQueued++; entriesHolder.Add(new JobEntry(jobView, jobView.GetJobTypeDescription())); break; case JobChangeEvent.BeforeRun: { var entry = entriesHolder.Find(e => e.JobId == jobView.Id); if (entry == null || entry.Locked) { return; } pane.JobsQueued--; pane.JobsInProgress++; entry.Status = JobStatus.Running; } break; case JobChangeEvent.AfterCompleted: { var entry = entriesHolder.Find(e => e.JobId == jobView.Id); if (entry == null || entry.Locked) { return; } pane.JobsInProgress--; entry.Status = JobStatus.Done; entry.Locked = true; } break; case JobChangeEvent.OnProgressChange: { var entry = entriesHolder.Find(e => e.JobId == jobView.Id); if (entry == null) { pane.JobsInProgress++; entriesHolder.AddToTop(new JobEntry(jobView, jobView.GetJobTypeDescription())); } else if (entry.Locked) { return; } else { entry.EntryProgress = jobView.Progress; } } break; case JobChangeEvent.ExceptionThrown: { var entry = entriesHolder.Find(e => e.JobId == jobView.Id); if (entry == null || entry.Locked) { return; } pane.JobsInProgress--; entry.EntryException = jobView.Exception; entry.Status = JobStatus.Error; entry.Locked = true; } break; case JobChangeEvent.Canceled: { var entry = entriesHolder.Find(e => e.JobId == jobView.Id); if (entry == null || entry.Locked) { return; } pane.JobsInProgress--; entry.Status = JobStatus.Canceled; entry.Locked = true; } break; default: throw new ArgumentOutOfRangeException("JobsPanePresenter.JobsChanged: Maybe new type of JobChangeEvent?"); } if (changeEvent == JobChangeEvent.AfterCompleted || changeEvent == JobChangeEvent.ExceptionThrown || changeEvent == JobChangeEvent.Canceled) { Task.Delay(2000).ContinueWith( _ => { entriesHolder.Remove(e => e.JobId == jobView.Id); } , new CancellationToken() , TaskContinuationOptions.None , TaskScheduler.FromCurrentSynchronizationContext() ); } }