单击一个按钮(在主窗体中),我会显示一个(第二个)表单,它对存档文件进行一些解析(解压缩,提取,获取信息等)。完成此过程后,我关闭第二个(解析)表单并显示另一个(第三个)表单,其中包含来自存档的已解析信息。
点击回调如下所示:
private void ParseInputBackupButton_Click(object sender, EventArgs e)
{
Form PBF = new ParseBackupForm();
Form CBF = new CreateBackupForm();
PBF.FormClosed += delegate
{
CBF.ShowDialog();
};
PBF.ShowDialog();
}
和第二种形式:
private void ParseBackupForm_Load(object sender, EventArgs e)
{
new Thread((ThreadStart)delegate
{
// parse and update form
this.Invoke((MethodInvoker)delegate
{
this.Close();
});
}).Start();
}
问题是当第三种形式(CreateBackupForm
)出现时,第二种形式(ParseBackupForm
)没有关闭。他们都出现了。如果我没有显示第三个表格,则第二个表格会关闭。
我做错了什么?
答案 0 :(得分:1)
据我所知,.ShowDialog()
是一种阻止方法,所以会阻止其他表单完成其close方法,直到该表单也被关闭为止?
非常确定您可以使用.Show()
使表单无阻塞地显示?
答案 1 :(得分:1)
当你在两个窗口上调用ShowDialog
时,你不能一个接一个地打电话给他们吗?
即
PBF.ShowDialog();
CBF.ShowDialog();
在PBG对话框关闭之前,不会进行第二次调用。
编辑:第二个表单未关闭的原因是您正在订阅表单在关闭时引发的事件,然后在该委托中调用ShowDialog
来阻止表单实际关闭。
答案 2 :(得分:0)
您可以开始调用CBF.ShowDialog();
的调用,从而不会阻止完成FormClosed回调方法和关闭PBF
表单。