在此WinForms项目中,我有一个特定的信息表单(InfoForm),它弹出2秒,然后消失。我这样做的方法是致电infoForm.Show();然后在InfoForm中,我有一个Timer,在2秒后滴答并调用Close()。现在,有时还有另一种形式的ErrorForm我需要模态显示(使用errorForm.ShowDialog()),以通知用户发生了错误,并且他们需要单击OK才能继续。在InfoForm打开和关闭时可能会发生这种情况,并且一个不应影响另一个。但是确实如此。我已经尽力在对ShowDialog的调用上设置一个断点,并且如果在碰到该断点时InfoForm是打开的,那么当我单击“ Step Over”时,而不是弹出,然后等待我单击“确定”,调试器将跳过该行,并且已经在下一行,就好像该窗体从未打开过一样。同时在后台ErrorForm已关闭,因此,如果我将执行点重置为对InfoForm的调用,然后将其“ Step Over”重置,按预期方式将显示该表单,并等待我单击“ OK”(确定)之前移至下一条语句。删除断点并写入调试日志证实了我的怀疑,即ErrorForm.ShowDialog()的关闭导致我的InfoForm被不合时宜地关闭:主题09-2011/12/14 16:39:30.574-显示信息表线程09-2011/12/14 16:39:31.300-在ErrorForm.ShowDialog之前线程09-2011/12/14 16:39:32.584-计时器滴答主题09-2011/12/14 16:39:32.585-信息表关闭线程09-2011/12/14 16:39:32.593-错误表单关闭线程09-2011/12/14 16:39:32.593-在ErrorForm.ShowDialog之后为什么会这样,怎么办? 最佳答案 您应将MainForm作为所有者传递给ErrorForm.ShowDialog()。关于c# - 消失的模态形式之谜,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8507096/ 10-10 21:32