У меня есть форма ожидания, которая отображается во время работы процесса. По какой-то причине форма ожидания появляется сразу, а ее компоненты - нет, они загружаются через несколько секунд. форма ожидания сначала выглядит следующим образом После загрузки компонентов форма ожидания работает, со следующей код
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;
}