在这个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之后
为什么会发生这种情况,治愈方法是什么?
答案 0 :(得分:6)
您应该将MainForm
作为所有者传递给ErrorForm.ShowDialog()
。