Форма ожидания показывает компоненты только по истечении определенного времени в c# - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть форма ожидания, которая отображается во время работы процесса. По какой-то причине форма ожидания появляется сразу, а ее компоненты - нет, они загружаются через несколько секунд. форма ожидания сначала выглядит следующим образом После загрузки компонентов форма ожидания работает, со следующей код

public partial class Form6 : Form
{
    public Action Worker { get; set; }
    public Form6(Action worker)
    {
        InitializeComponent();
        if (worker == null)
            throw new ArgumentNullException();
        Worker = worker;
    }
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        Task.Factory.StartNew(Worker).ContinueWith(t => { this.Close(); }, TaskScheduler.FromCurrentSynchronizationContext());
    }

}

запуск процесса с формой ожидания выглядит следующим образом

  using (Form6 frm = new Form6(load))
        {
            frm.ShowDialog(this);
        }

Есть ли способ это исправить? Спасибо за помощь. функция, которая обрабатывается (я не думаю, что это влияет на проблему)

 private void load()
    {

        if (dataGridView1.InvokeRequired)
        {
            //Invoke only the ui-interaction code
            dataGridView1.Invoke(new MethodInvoker(this.load));
        }
        if (dataGridView3.InvokeRequired)
        {
            //Invoke only the ui-interaction code
            dataGridView3.Invoke(new MethodInvoker(this.load));
        }



        for (int i = 0; i < dataGridView1.RowCount; i++)
        {
            for (int y = 1; y < 8; y++)
            {
                dataGridView1.Rows[i].Cells[y].Value = false;

            }

        }


        DataBase.Query("Select * from WorkHours");
        int rows = DataBase.ds.Tables[0].Rows.Count;
        bool flag = true;
        for (int i = 0; i < rows; i++)
        {
            if (flag)
            {
                DataBase.Query("Select * from WorkHours");
                if (Form40.Wid == int.Parse(DataBase.ds.Tables[0].Rows[i]["IdW"].ToString()))
                {
                    switch (week(int.Parse(DataBase.ds.Tables[0].Rows[i]["ShiftNum"].ToString()), double.Parse(DataBase.ds.Tables[0].Rows[i]["inShift"].ToString())))
                    {
                        case 0:

                            dataGridView1.Rows[shift].Cells[(int)day.DayOfWeek + 1].Value = true;


                            break;
                        case 1:
                            flag = false;
                            break;

                    }
                }
            }
            else
                break;
        }

        for (int i = 0; i < dataGridView1.RowCount; i++)
        {

            table.Rows.Add(dataGridView1.Rows[i].Cells[1].Value, dataGridView1.Rows[i].Cells[2].Value, dataGridView1.Rows[i].Cells[3].Value, dataGridView1.Rows[i].Cells[4].Value, dataGridView1.Rows[i].Cells[5].Value, dataGridView1.Rows[i].Cells[6].Value, dataGridView1.Rows[i].Cells[7].Value);
        }

        dataGridView3.DataSource = table;
        dataGridView1.Columns[0].ReadOnly = true;



    }
...