经过长时间的计算后,MessageBox不会在mdi表单上显示

时间:2010-03-30 10:41:32

标签: c# mdi messagebox

This one这是一个非常类似的问题,遗憾的是,一个人也没有回答。

我有一个主持多个儿童表格的MDI主论坛。其中一个执行长计算并在发生错误时抛出异常(所有工作都在同一个线程上完成)。然后我尝试通过消息框通知用户错误,但它没有出现(但是从MDI Main窃取焦点,因此应用程序完全没有响应)。

如果我调用Application.DoEvents()(我知道邪恶,但这是最后的事情),beheviour会稍微改变。然后表单保持完全活动状态,只有在我将活动应用程序(Alt + Tab)更改为其他内容然后再返回后,才会显示消息框。

我该怎么做才能确保消息框可见?我已经尝试将活动子和MDI Main作为参数传递给MessageBox.Show方法。它不会改变行为。

澄清:消息框是子表单的一部分,但是此时我愿意以任何不破解应用程序的方式显示它。消息框应该是模态的,但它应该是可见的,以便用户可以确认。

3 个答案:

答案 0 :(得分:1)

我有同样的问题。当按下ALT弹出窗口时显示。

原来是一个将AutoSize属性设置为true的LinkedLabel。 LinkedLabel位于FlowLayoutPanel内。当我将LinkedLabel.Text属性设置为String.Empty时。 LinkedLabel不断尝试调整大小,这导致GUI不断忙碌。

当我关闭AutoSize属性时,GUI不再需要重新计算位置。 GUI不是免费的。弹出窗口显示。

可能有其他控件表现相同。 也可以看看: https://connect.microsoft.com/VisualStudio/feedback/details/116884

答案 1 :(得分:0)

MessageBox是在MainForm中显示还是作为ChildForms的一部分?如果MessageBox在子窗体中,您可以将事件传递回MainForm并在那里打开MessageBox。

答案 2 :(得分:0)

问题是消息框往往是模态的。 在这个例子中,我认为你可以更好地在主MDI代码中使用委托或带有处理程序的事件。这样您的主应用程序就会显示消息框。如果您希望传递所需的任何信息,可以轻松重新定义EventArgsType。

相关问题