Программное обеспечение запускает поток с некоторыми вычислениями, а затем показывает другое Form
в виде диалогового окна ожидания с ShowDialog
.Когда поток BackgroundWorker
заканчивает свою работу, Form
закрывается в событии RunWorkerCompleted
, и другой расчет начинается с другого Form
в качестве диалогового окна ожидания (снова с ShowDialog
).
Проблема в том, что первое диалоговое окно ожидания остается видимым, пока второе диалоговое окно ожидания не будет закрыто.Как ждать отображения второго диалога после того, как первый диалог действительно закрыт?
Простой код для воспроизведения:
private BackgroundWorker _bgw = new BackgroundWorker();
private Form2 _msg = new Form2();
private Form3 _msg2 = new Form3();
public Form1()
{
_bgw.DoWork += BgwDoWork;
_bgw.RunWorkerCompleted += BgwRunWorkerCompleted;
_bgw.RunWorkerAsync();
_msg.ShowDialog();
}
private void BgwDoWork(object sender, DoWorkEventArgs e)
{
System.Threading.Thread.Sleep(5000);
}
private void BgwRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
_msg.Close();
_msg2.ShowDialog();
}