예제 #1
0
        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();
            }
        }
예제 #2
0
 private bool CanReplayFailedTask()
 {
     if (RunInstanceCollection != null)
     {
         if (RunInstanceCollection.Where(o => o.Status == Status.Fail).Count() > 0)
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
예제 #3
0
        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;
                    }
                }
            }
        }
예제 #4
0
        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;
                    }
                }
            }
        }