private void ParseLog(string logFile) { var operation = new ConsoleOperationController(logFile, "Ready to parse"); try { ProgramHelper.DoWork(operation); operation.FinalizeStatus("Parsing Successful - "); } catch (ExceptionEncompass ex) { operation.UpdateProgress(ex.GetFinalException().Message); operation.FinalizeStatus("Parsing Failure - "); } catch (Exception) { operation.UpdateProgress("Something terrible has happened"); operation.FinalizeStatus("Parsing Failure - "); } finally { ProgramHelper.GenerateLogFile(operation); } }
private void _RunOperation(FormOperationController operation) { _runningCount++; operation.ToQueuedState(); var cancelTokenSource = new CancellationTokenSource();// Prepare task Task task = Task.Run(() => { operation.ToRunState(); ProgramHelper.DoWork(operation); }, cancelTokenSource.Token).ContinueWith(t => { cancelTokenSource.Dispose(); _runningCount--; // Exception management if (t.IsFaulted) { if (t.Exception != null) { if (t.Exception.InnerExceptions.Count > 1) { operation.UpdateProgress("Something terrible has happened"); } else { Exception ex = t.Exception.InnerExceptions[0]; if (!(ex is ExceptionEncompass)) { operation.UpdateProgress("Something terrible has happened"); } if (!(ex.InnerException is OperationCanceledException)) { operation.UpdateProgress(ex.GetFinalException().Message); } else { operation.UpdateProgress("Operation Aborted"); } } } else { operation.UpdateProgress("Something terrible has happened"); } } if (operation.State == OperationState.ClearOnCancel) { operatorBindingSource.Remove(operation); } else { if (t.IsFaulted) { operation.ToUnCompleteState(); } else if (t.IsCanceled) { operation.UpdateProgress("Operation Aborted"); operation.ToUnCompleteState(); } else if (t.IsCompleted) { operation.ToCompleteState(); } else { operation.UpdateProgress("Something terrible has happened"); operation.ToUnCompleteState(); } } ProgramHelper.GenerateLogFile(operation); RunNextOperation(); }, TaskScheduler.FromCurrentSynchronizationContext()); operation.SetContext(cancelTokenSource, task); }