как открыть другую форму, которая будет иметь индикатор выполнения, когда поток пользовательского интерфейса занят - PullRequest
0 голосов
/ 08 ноября 2018

Я пробовал с фоновым рабочим. Когда вызывается функция с загрузкой данных базы данных, я также вызываю backgroundworker, и я хочу открыть другую форму, которая будет иметь индикатор выполнения, а когда загрузка данных будет завершена, я хочу закрыть эту форму и позволить пользователю нормально использовать приложение. Я пробовал это

private void SearchBtn_Click(object sender, EventArgs e)
{
    backgroundWorker1.RunWorkerAsync();
   //loading data
}

это функция, выполнение которой занимает много времени, поэтому я вызываю фонового работника.

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    f.Show();
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    f.Close();
}

f - это моя глобальная переменная формы, когда я пишу так, я получаю ошибку, что не могу закрыть форму, которая была открыта в другом потоке. Так что я делаю не так.

1 Ответ

0 голосов
/ 08 ноября 2018

Вы должны Invoke метод в потоке, которому принадлежит элемент управления:

Invoke(new Action(() => f.Close()));

Взгляните на Invoke метод.

...