gpt4 book ai didi

c# - 如何等待对话框真正关闭

转载 作者:行者123 更新时间:2023-12-03 12:51:45 27 4
gpt4 key购买 nike

该软件以一些计算启动线程,然后将另一个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();
}

最佳答案

请注意,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
}

关于c# - 如何等待对话框真正关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55970268/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com