private void AutoGenerateTimer_Tick(object sender, EventArgs e)                                                             //тик таймера автогенерации
        {
            int sttmp = rnd.Next((int)((GenerateStageRangeMax.Value - GenerateStageRangeMin.Value) + GenerateStageRangeMin.Value)); // получаем диапазон количества стейджей и задаем их рандомное значение

            if (sttmp % 2 == 0)
            {
                sttmp = sttmp + 1;
            }                                              //делаем количество стейджей нечетным
            ProcessObject temp = new ProcessObject(sttmp); //создаем темп объект процесса с указаным выше количеством стейджей

            for (int i = 0; i < temp.StageCount; i++)      //рандомно заполняем их. (для четного и нечетного правила разные)
            {
                if (i % 2 == 0)
                {
                    temp.StageQuue[i] = rnd.Next((int)((GenerateStageTimeRangeMax.Value - GenerateStageTimeRangeMin.Value) + GenerateStageTimeRangeMin.Value) * 1000);
                }
                else
                {
                    temp.StageQuue[i] = rnd.Next((int)((GenerateStageTimeRangeMax.Value - GenerateStageTimeRangeMin.Value) + GenerateStageTimeRangeMin.Value));
                }
            }
            temp.ProcessID   = ID;                     //записываем ид
            temp.ProcessName = "test" + ID.ToString(); //записываем имя
            ID++;                                      //инкримируем ид
            temp.ProcessPriority = rnd.Next(1000);     //задаем приоритет
            QueueProcess.Add(temp);                    //добавляем в очередь готовых
            WriteToLog(temp, "Сгенерирована задача");  //записываем в лог

            if (ExecutedProcessName.Text == "")        //проверяем наличие выполняемого процесса
            {
                ToExecutedTask();
                ExecutedTimer.Start();  // старт таймера выполнения процесса
            }
            RefreshReadyQuueViewFunc(); //перерисовка очереди готовых задач
        }
 private void WaitingQuueTimer_Tick(object sender, EventArgs e) // таймер очереди ожидания
 {
     if (WaitingProcess.Count != 0)                             //процерка на наличие процессов в очереди ожидания
     {
         bool refr = false;                                     //переменная указывающая на необходимость перирисовки
         for (int i = 0; i < WaitingProcess.Count; i++)
         {
             if (WaitingProcess[i].WaitingTime++ >= WaitingProcess[i].StageQuue[WaitingProcess[i].StageNow]) //проверка на время нахождения в очереди готовых
             {
                 WaitingProcess[i].StageNow++;                                                               //меняем стейдж
                 WaitingProcess[i].WaitingTime = 0;                                                          //обнуляем время ожидания
                 QueueProcess.Add(WaitingProcess[i]);                                                        //отравление в очередь готовых
                 WriteToLog(WaitingProcess[i], "Отправлен в очередь готовых из ожидания");                   //запись в лог
                 WaitingProcess.Remove(WaitingProcess[i]);                                                   //удаление из очереди ожидания
                 if ((QueueProcess.Count == 1) && (ExecutedTimer.Enabled == false))
                 {
                     StartExTimerFromWaitingQu = true; ExecutedTimer.Interval = 1; ExecutedTimer.Start();
                 }            // проверка на наличие процессов в очереди готовности и запущен ли таймер выполнения
                 refr = true; //включаем флаг на перерисовку
             }
             else
             {
                 WaitingProcess[i].WaitingTime++;//инкримируем время ожидания процесса
             }
         }
         if (refr == true)                 //проверка на необходимость перерисовки
         {
             RefreshWaitingQuueViewFunc(); //перерисовка очереди ожидания
             RefreshReadyQuueViewFunc();   //перерисовка очереди исполнения
         }
     }
     else
     {
         WaitingQuueTimer.Stop();
     }                                //остановка таймера ожидание, если очередь пуста
 }