public void StartTask() { if (((MainWindow)ParentWindow).m_paramsVM.IsModified || ((MainWindow)ParentWindow).m_machineVM.IsModified || ((MainWindow)ParentWindow).m_actionVM.IsModified || ((MainWindow)ParentWindow).m_taskVM.IsModified) { MessageBoxResult resultSave = MessageBox.Show("Something changed, have to be saved before task, Yes or No?", "Confirm", MessageBoxButton.YesNo, MessageBoxImage.Question); if (resultSave == MessageBoxResult.Yes) { ((MainWindow)ParentWindow).SaveFile(); } else { return; } } if (RunInstanceCollection != null) { MessageBoxResult result = MessageBox.Show("Are you going to task again? Previous runs will be cleaned.", "Confirm", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { RunInstanceCollection.Clear(); RunInstanceCollection = null; Run(); } } else { Run(); } }
private bool CanReplayFailedTask() { if (RunInstanceCollection != null) { if (RunInstanceCollection.Where(o => o.Status == Status.Fail).Count() > 0) { return(true); } else { return(false); } } else { return(false); } }
public void StopTask() { if (runWorker.WorkerSupportsCancellation == true) { if (runWorker.IsBusy == true) { MessageBoxResult result = MessageBox.Show("Are you going to stop the runs?", "Confirm", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { #region Abort task instance threads foreach (Thread thread in runInstanceThreads.Where(o => o.IsAlive)) { thread.Abort(); } #endregion #region Set all running task instance and action instance status to be fail foreach (OctopusLib.RunInstance ri in RunInstanceCollection.Where(o => o.Status == Status.InProgress)) { foreach (OctopusLib.ActionInstance ai in ri.ActionInstanceCollection.Where(p => p.Status == Status.InProgress)) { Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart) delegate { ai.Status = Status.Fail; }); } Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart) delegate { ri.Status = Status.Fail; }); } #endregion runWorker.Abort(); runWorker.Dispose(); } else { return; } } } }
private void Run_DoWork(object sender, DoWorkEventArgs e) { bool isContinue = true; if (!_isReplayFailedTaskOnly) { OctopusInst.CreateRunInstance(); RunInstanceCollection = OctopusInst.RunInstanceCollection; if (RunInstanceCollection == null) { return; } else if (RunInstanceCollection.Count > 0) { runInstanceThreads = new List <Thread>(); foreach (var runInstancesGroup in RunInstanceCollection.OrderBy(k => k.Task.Sequence).GroupBy(p => p.Task.Sequence)) { if (!isContinue) { return; } foreach (var runInstance in runInstancesGroup) { Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart) delegate { runInstance.Status = Status.InProgress; }); runInstance.UIDispatcher = Application.Current.Dispatcher; Thread runInstanceThread = new Thread(runInstance.StartRun); runInstanceThread.Priority = ThreadPriority.AboveNormal; runInstanceThread.Start(); runInstanceThreads.Add(runInstanceThread); } foreach (Thread thread in runInstanceThreads) { // Wait until thread is finished. thread.Join(); } var failcount = 0; foreach (var runInstance in runInstancesGroup) { failcount += runInstance.ActionInstanceCollection.Where(o => o.Status == Status.Fail).Count(); } if (failcount > 0) { isContinue = false; } } } } else { runInstanceThreads = new List <Thread>(); foreach (var runInstancesGroup in RunInstanceCollection.Where(o => o.Status == Status.Fail).OrderBy(k => k.Task.Sequence).GroupBy(p => p.Task.Sequence)) { if (!isContinue) { return; } foreach (var runInstance in runInstancesGroup) { Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart) delegate { runInstance.Status = Status.InProgress; }); foreach (var actionInstance in runInstance.ActionInstanceCollection) { foreach (var command in actionInstance.Action.ActionCommands) { Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart) delegate { command.Status = Status.NotRun; }); } Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart) delegate { actionInstance.Status = Status.NotRun; }); } runInstance.UIDispatcher = Application.Current.Dispatcher; Thread runInstanceThread = new Thread(runInstance.StartRun); runInstanceThread.Priority = ThreadPriority.AboveNormal; runInstanceThread.Start(); runInstanceThreads.Add(runInstanceThread); } foreach (Thread thread in runInstanceThreads) { // Wait until thread is finished. thread.Join(); } var failcount = 0; foreach (var runInstance in runInstancesGroup) { failcount += runInstance.ActionInstanceCollection.Where(o => o.Status == Status.Fail).Count(); } if (failcount > 0) { isContinue = false; } } } }