如何等待对话框真正关闭

时间:2019-05-03 12:54:18

标签: c# multithreading winforms user-interface showdialog

软件以一些计算开始线程,然后显示另一个Form作为带有ShowDialog的等待对话框。 BackgroundWorker线程完成工作后,Form事件中的RunWorkerCompleted关闭,另一个计算从另一个Form开始,作为一个等待对话框(带有{{1} })。

问题在于直到关闭第二个等待对话框之前,第一个等待对话框仍然可见。在第一个对话框真正关闭后,如何等待显示第二个对话框?

简单的代码可重现:

ShowDialog

1 个答案:

答案 0 :(得分:4)

请注意,ShowDialog()是阻塞调用。当显示_msg2时,您仍未从构造函数返回。

这是一个快速解决方案:

public Form1()
{
    _bgw.DoWork += BgwDoWork;
    _bgw.RunWorkerCompleted += BgwRunWorkerCompleted;
    _bgw.RunWorkerAsync();
    _msg.ShowDialog();
    _msg2.ShowDialog();   // here
}

private void BgwRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    _msg.Close();
    //_msg2.ShowDialog();  // not here
}