消失的模态形式之谜

时间:2011-12-14 15:28:19

标签: c# winforms

在这个WinForms项目中,我有一个弹出2秒的特定信息表单(InfoForm),然后消失。我这样做是通过调用

infoForm.Show();

然后在InfoForm内我有一个Timer,在2秒后打勾并调用Close()

现在,有时会有另一种形式ErrorForm我需要以模态方式(使用errorForm.ShowDialog())显示,以通知用户发生了错误,并且他们需要先单击“确定”才能继续。这可能发生在InfoForm打开和关闭时,一个不应该影响另一个。

但确实如此。

我已经在调用ShowDialog时设置了一个断点,并且如果在我到达断点时InfoForm打开,那么当我点击'Step Over'时,而不是弹出ErrorForm并等待我单击“确定”,调试器只是跨越该行并且已经在下一行,就好像表单永远不会打开一样。同时在后台InfoForm已关闭,所以如果我将执行点重置为调用ErrorForm.ShowDialog(),然后“跳过”,则表单会按预期显示,并等待我点击在转到下一个声明之前,“OK”。

删除断点并写入调试日志,这证实了我怀疑导致InfoForm不及时关闭的ErrorForm的关闭:

  

主题09 - 2011/12/14 16:39:30.574 - 显示的信息表

     

主题09 - 2011/12/14 16:39:31.300 - 在ErrorForm.ShowDialog之前

     

Thread 09 - 2011/12/14 16:39:32.584 - Timer Tick

     

主题09 - 2011/12/14 16:39:32.585 - 信息表格结束

     

Thread 09 - 2011/12/14 16:39:32.593 - 关闭错误

     

Thread 09 - 2011/12/14 16:39:32.593 - 在ErrorForm.ShowDialog之后

为什么会发生这种情况,治愈方法是什么?

1 个答案:

答案 0 :(得分:6)

您应该将MainForm作为所有者传递给ErrorForm.ShowDialog()