Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 4)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

BlackVetal



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

    public partial class Form_ControlWindow : Form
    {
        #region Поля
 
        /// <summary>
        /// Максимальное значение для генерации случайного останова процесса имитации конвеера
        /// </summary>
        private int maxValueSleep = 10000;
 
        /// <summary>
        /// Максимальное значение для генерации аварийного останова
        /// </summary>
        private int maxValueАвария = 100000;
 
 
        /// <summary>
        /// Предел - когда считается что ситуация аварийная и нужен останов
        /// </summary>
        private int PredelАвария = 95000;
 
 
        /// <summary>
        /// Статус конвеера №1
        /// </summary>
        private Conveer_Status Status1;
 
        /// <summary>
        /// Статус конвеера №2
        /// </summary>
        private Conveer_Status Status2;
 
        /// <summary>
        /// Статус конвеера №3
        /// </summary>
        private Conveer_Status Status3;
 
        /// <summary>
        /// Статус конвеера №4
        /// </summary>
        private Conveer_Status Status4;
 
 
        #endregion
 
 
 
 
        #region Конструктор
 
        /// <summary>
        /// Конструктор данного класса
        /// </summary>
        public Form_ControlWindow()
        {
            InitializeComponent();
        }
 
        #endregion
 
 
        #region Методы
 
 
        /// <summary>
        /// Делегат - необходим для создания асинхронных и синхронных потоков
        /// имитации работы конвеера
        /// </summary>
        /// <param name="_status"> Статус конвеера</param>
        /// <param name="_TextBox">Контрол - куда нужно выводить статус</param>
        delegate void StartConveerDelegate(Conveer_Status Status, RichTextBox _TextBox, XtraUserControl _userControl);
         
        /// <summary>
        /// Метод Запускает конвеер с переданными параметрами.  
        /// В переменной _status - передается ссылка на переменную содержащую статус конвеера
        /// а в переменной _TextBox - передается контрол - в котором должна выводиться информация  
        /// о состоянии конвеера и смене стадий обработки
        /// </summary>
        /// <param name="_status"> Статус конвеера</param>
        /// <param name="_TextBox">Контрол - куда нужно выводить статус</param>
        private void StartConveer(Conveer_Status Status, RichTextBox _TextBox, XtraUserControl _userControl)
        {
            // создаем объект генератора случайных чисел
            Random rnd = new Random();
 
            // цикл имитации конвеера - бесконечный
            while (true)
            {
                // получаем текущий статус конвеера
                int Step = (int)Status;
                //если статус - последний цикл обработки асбеста, то переходим к первому шагу
                if (Step == (int)Conveer_Status.Упаковка_Хризотила)
                    Step = (int)Conveer_Status.Загрузка_Руды;
                else  // иначе просто переходим к следующему шагу
                    Step++;
                // присваиваем новый статус конвеера
                Status = (Conveer_Status)Step;
 
                // вычисляем аварийную ситуацию
                // для этого генерируем число - которое означает вероятность аварии
                // затем сравниваем с пределом - который означает допустимое значение
                // аварийности
                int авария = rnd.Next(maxValueАвария);
                if (авария > PredelАвария)
                {
                    // выводим статус что произошла авария
                    ShowStatus(Conveer_Status.Останов_Авария, _TextBox, _userControl);
                    // приостанавливаем поток
                    Thread.Sleep(rnd.Next(maxValueSleep*3));
                }
                // выводим статус что произошла авария
                ShowStatus(Status, _TextBox, _userControl);
                // приостанавливаем поток
                Thread.Sleep(rnd.Next(maxValueSleep));
            }
        }
 
        /// <summary>
        /// Делегат - необходим для создания синхронных и асинхронных потоков вывода
        /// статуса конвеера.
        /// ПО сути дела - это объявление шаблона.
        /// </summary>
        /// <param name="_status"> Статус конвеера который нужно вывести</param>
        /// <param name="_TextBox">Контрол - куда нужно вывести статус</param>
        delegate void ShowStatusDelegate(Conveer_Status _status, RichTextBox _TextBox, XtraUserControl _userControl);
 
 
        /// <summary>
        /// Метод выводит текущий статус конвеера в соответствующее ему окошко.
        /// Весь вывод осуществляется асинхронно - если все идет стандартно. Это
        /// необходимо для того чтобы не тормозить остальные процессы.
        /// </summary>
        /// <param name="_status"> Статус конвеера который нужно вывести</param>
        /// <param name="_TextBox">Контрол - куда нужно вывести статус</param>
        private void ShowStatus(Conveer_Status _status, RichTextBox _TextBox, XtraUserControl _userControl)
        {
            // проверяем - соответствует ли даный контрол текущему потоку
            if (_TextBox.InvokeRequired == false)
            {
                // выводим строку статуса
                _TextBox.Text += "" + DateTime.Now.ToString() + " -> " + _status + Environment.NewLine;
                _userControl.SetStep(_status);
            }
            else // создаем вывод статуса в синхронном потоке
            {
                ShowStatusDelegate _showStatus = new ShowStatusDelegate(ShowStatus);
                this.BeginInvoke(_showStatus, new object[] { _status, _TextBox, _userControl });
            }
        }
 
 
        #endregion
 
 
        #region События
 
 
        /// <summary>
        /// Метод Запускает конвеер №1. Сначала запускается инициализация конвера,
        /// его тестирование. Затем уже не посредственно работа.
        /// </summary>
        /// <param name="sender">Источник события - кнопка button_StartConveer1</param>
        /// <param name="e">Аргументы события</param>
        private void button_StartConveer1_Click(object sender, EventArgs e)
        {
            Status1 = Conveer_Status.Останов;
            textBox_conveer1.Text += "" + DateTime.Now.ToString() + " -> " + Conveer_Status.Останов + Environment.NewLine;
            StartConveerDelegate _startConveer = new StartConveerDelegate(StartConveer);
            _startConveer.BeginInvoke(Status1, textBox_conveer1, xtraUserControl1, null, null);
        }
 
        /// <summary>
        /// Метод Запускает конвеер №2. Сначала запускается инициализация конвера,
        /// его тестирование. Затем уже не посредственно работа.
        /// </summary>
        /// <param name="sender">Источник события - кнопка button_StartConveer2</param>
        /// <param name="e">Аргументы события</param>
        private void button__StartConveer2_Click(object sender, EventArgs e)
        {
            Status2 = Conveer_Status.Останов;
            richTextBox_Conveer2.Text += "" + DateTime.Now.ToString() + " -> " + Conveer_Status.Останов + Environment.NewLine;
            StartConveerDelegate _startConveer = new StartConveerDelegate(StartConveer);
            _startConveer.BeginInvoke(Status2, richTextBox_Conveer2, xtraUserControl2, null, null);
        }
 
        /// <summary>
        /// Метод Запускает конвеер №3. Сначала запускается инициализация конвера,
        /// его тестирование. Затем уже не посредственно работа.
        /// </summary>
        /// <param name="sender">Источник события - кнопка button_StartConveer3</param>
        /// <param name="e">Аргументы события</param>
        private void button__StartConveer3_Click(object sender, EventArgs e)
        {
            Status3 = Conveer_Status.Останов;
            richTextBox_Conveer3.Text += "" + DateTime.Now.ToString() + " -> " + Conveer_Status.Останов + Environment.NewLine;
            StartConveerDelegate _startConveer = new StartConveerDelegate(StartConveer);
            _startConveer.BeginInvoke(Status3, richTextBox_Conveer3, xtraUserControl3, null, null);
        }
 
        /// <summary>
        /// Метод Запускает конвеер №4. Сначала запускается инициализация конвера,
        /// его тестирование. Затем уже не посредственно работа.
        /// </summary>
        /// <param name="sender">Источник события - кнопка button_StartConveer4</param>
        /// <param name="e">Аргументы события</param>
        private void button_StartConveer4_Click(object sender, EventArgs e)
        {
            Status4 = Conveer_Status.Останов;
            richTextBox_Conveer4.Text += "" + DateTime.Now.ToString() + " -> " + Conveer_Status.Останов + Environment.NewLine;
            StartConveerDelegate _startConveer = new StartConveerDelegate(StartConveer);
            _startConveer.BeginInvoke(Status4, richTextBox_Conveer4, xtraUserControl4, null, null);
        }
 
        #endregion
 
 
 
 
         
    }
 
    /// <summary>
    /// Статусы конвеера - стадии обработки и возможные остановы.
    /// </summary>
    public enum Conveer_Status
    {  
        Останов = 0,
        Загрузка_Руды = 1,
        Дробление_Руды = 2,
        Отсев_Волокна = 3,
        Распущевание_Волокна = 4,
        Прессовка_Волокна = 5,
        Упаковка_Хризотила = 6,
        Останов_Авария = 10
    }
 

Всего записей: 1094 | Зарегистр. 13-11-2005 | Отправлено: 15:02 19-09-2013
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Использование DevExpress (часть 4)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru