为什么在表单关闭之前显示消息框?
SomeForm myForm = new SomeForm();
myForm.Show();
MessageBox.Show("Some text");
我是否需要启动一个新线程并等待它完成?我以前从未遇到过这个问题。
您需要改用Form.ShowDialog()。Form.Show 显示一个非模式窗口,而 Form.ShowDialog 显示一个模式窗体,即用户必须关闭才能继续。
如果在显示其他表单时用户无法与主表单交互很重要,那么您可以myForm.ShowDialog
使用Show
. ShowDialog
是一个阻塞函数,所以在另一个表单关闭之前它不会返回。 Show
,另一方面,只显示另一个表单,然后立即返回,而无需等待表单关闭。
如果故意不以模态方式显示另一个表单,并且您没有(或不能)进行更改,那么您可以使用事件在另一个表单关闭时显示一个消息框。
SomeForm myForm = new SomeForm();
myForm.FormClosed += (form, args) =>
{
MessageBox.Show("Some text");
};
myForm.Show();
这将添加一个事件处理程序,该处理程序在另一个窗体关闭时触发,并在适当的时间执行所需的代码。
这样做的原因是myForm.Show();
开始打开一个新窗口,但它不是阻塞调用。它不是一个对话框,它是一个单独的窗口,它自己运行。
如果您希望 SomeForm 显示为 Dialog(阻塞窗口,等待关闭以继续执行),请使用ShowDialog
. 如果要等到窗口打开再显示 MessageBox,则将 MessageBox 添加到 SomeForm claa 上的 OnLoaded。
您的示例从未真正关闭myForm
...仅显示它。我希望上面的代码显示myForm
然后立即显示MessageBox
.
如果您想myForm
在显示 MessageBox 之前关闭,您需要myForm.Close()
在某个时候调用。