public Dispatcher(SchedulerUI GUI, ProcessList list, int time_quantum = -1)
 {
     this.GUI = GUI;
     this.list = list;
     this.time_quantum = time_quantum; //only for preemptive algorithms
 }
        private void button1_Click(object sender, EventArgs e)
        {
            clearQueues();
            clear_input_grid();
            createQueues();
            pause_start_button.Text = "Pause";
            output_grid.Visible = false;
            process_queue.Visible = false;
            output_grid.RowHeadersVisible = false;

            // clearing the table before starting the updating
            output_grid.Columns.Clear();

            int row_count = input_grid.RowCount - 1;
            if (row_count < 1)
            {
                return;
            }
            // Creating the new process list with the data in the input grid
            ProcessList process_list = new ProcessList();
            for (int i = 0; i < row_count; i++)
            {
                DataGridViewRow row = input_grid.Rows[i];
                try
                {
                    int arrival_time = (int)row.Cells[1].Value;
                    int service_time = (int)row.Cells[2].Value;
                    process_list.add_process(arrival_time, service_time);
                }
                catch (Exception)
                {
                    MessageBox.Show("Invalid data found", "Invalid data", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }

            }
            //validate
            if (!validate_data(this.input_grid))
            {
                MessageBox.Show("Please enter valid data, positive integers and not null fields", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            // get the total time to create the new grid
            int total_time = process_list.get_total_time();
            int total_width = splitContainer1.Panel2.Width - 50 - 30;
            int cell_width = total_width / total_time;

            output_grid.ColumnCount = total_time + 1;
            output_grid.RowCount = row_count;
            output_grid.Width = total_time * cell_width + 40;
            output_grid.Height = 400;
            output_grid.Columns[0].HeaderText = "PID";
            output_grid.Columns[0].Width = 30;
            for (int i = 1; i < output_grid.ColumnCount; i++)
            {
                // setting up the width
                output_grid.Columns[i].Width = cell_width;
                // setting the columns to read only
                output_grid.Columns[i].ReadOnly = true;
                //setting the column headers
                output_grid.Columns[i].HeaderText = i - 1 + "-" + i;
            }

            // setting up the PIDs
            for (int i = 0; i < row_count; i++)
            {
                output_grid.Rows[i].Cells[0].Value = i + 1;
            }

            // perform the schedulng algorithm
            dispatcher = new Dispatcher(this, process_list, (int)time_slice_selector.Value);
            dispatcher.run_Dispatcher(algo_selector.SelectedIndex + 1);
            console_out.Text = "Process history\r\n";
            output_grid.ClearSelection();
            output_grid.Visible = true;
            process_queue.Visible = true;
        }