public void AddExecutor()
        {
            ExecutorClass Executor = new ExecutorClass(this);

            Executor.StatusChanged += new EventHandler(Recipe.Executor_StatusChanged);
            this.Executors.Add(Executor);
            OnRasieExecutorAddedEvent(Executor);    //Notify viewmodel
        }
        protected virtual void OnRasieExecutorAddedEvent(ExecutorClass executor)
        {
            EventHandler           handler = ExecutorAdded;
            ExecutorAddedEventArgs arg     = new ExecutorAddedEventArgs(executor);

            if (handler != null)
            {
                handler(this, arg);
            }
        }
Exemple #3
0
        public void AssignAssets(BatteryClass Battery, ChamberClass Chamber, TesterChannelClass TesterChannel)
        {
            //Check if the assets is in use or not first
            if (WaitingList.Count == 0) //Prompt warning
            {
                System.Windows.MessageBox.Show("No waiting tasks to assign assets to!");
                return;
            }
            RequestedSubProgramClass RequestedSubProgram = TopWaitingRequestedSubProgram;
            ExecutorClass            validExecutor       = TopWaitingRequestedSubProgram.TopWaitingRequestedRecipe.ValidExecutor;

            validExecutor.AssignAssets(Battery, Chamber, TesterChannel);
        }
 public void Executor_StatusChanged(object sender, EventArgs e)  //可以不用event,而是把这个直接放到EstimateDuration的get里去。而且这个属于view而非model
 {
     try
     {
         ExecutorClass Executor = (ExecutorClass)sender;
         switch (Executor.Status)
         {
         case ExecutorStatus.Completed:
             EstimateDuration = Executor.EndTime - Executor.StartTime;       //Just use the last executor's value here. A better and more complex way is to use historic average value.
             break;
         }
     }
     catch
     {
         //sender is not a ExecutorClass type
         return;
     }
 }
Exemple #5
0
        private void Executor_StatusChanged(object sender, EventArgs e)
        {
            try
            {
                ExecutorClass            Executor = (ExecutorClass)sender;
                RequestedSubProgramClass root     = Executor.RequestedRecipe.RequestedSubProgram;
                switch (Executor.Status)
                {
                case ExecutorStatus.Ready:
                    WaitingList.Remove(root);
                    ReadyList.Add(root);
                    break;

                case ExecutorStatus.Executing:
                    ReadyList.Remove(root);
                    RunningList.Add(root);
                    break;

                case ExecutorStatus.Completed:
                    RunningList.Remove(root);
                    if (root.RequestedRecipes.Count == 1)
                    {
                        CompletedList.Add(root);
                    }
                    else if (root.RequestedRecipes.Count > 1)
                    {
                        WaitingList.Insert(0, root);
                    }
                    break;

                case ExecutorStatus.Abandoned:
                    if (ReadyList.Contains(root))
                    {
                        ReadyList.Remove(root);
                    }
                    else if (WaitingList.Contains(root))
                    {
                        WaitingList.Remove(root);
                    }
                    else if (RunningList.Contains(root))
                    {
                        RunningList.Remove(root);
                    }
                    else if (CompletedList.Contains(root))
                    {
                        CompletedList.Remove(root);
                    }
                    break;

                case ExecutorStatus.Invalid:
                    Executor.RequestedRecipe.AddExecutor();
                    if (CompletedList.Contains(root))
                    {
                        CompletedList.Remove(root);
                        WaitingList.Insert(0, root);        //back to the top by default
                    }
                    else if (RunningList.Contains(root))
                    {
                        RunningList.Remove(root);
                        WaitingList.Insert(0, root);        //back to the top by default
                    }
                    break;
                }
            }
            catch
            {
                //sender is not a ExecutorClass type
                return;
            }
        }
 public ExecutorAddedEventArgs(ExecutorClass newExecutor)
 {
     this.NewExecutor = newExecutor;
 }