小编典典

Application.Run()和Form.ShowDialog()有什么区别?

c#

在我的应用程序中,如果登录成功,我想先显示一个登录表单,然后显示主表单。目前,我正在执行以下操作:

var A = new LoginForm();
if ( A.ShowDialog() == DialogResult.OK )
    Application.Run(new MainForm());

但是后来我开始怀疑-这是什么意思Application.Run()?为什么不这样做(new MainForm()).ShowDialog()呢?有什么不同?而实现我想要的目标的正确方法是什么?


阅读 660

收藏
2020-05-19

共1个答案

小编典典

Application.Run(Form)在当前线程上启动消息循环并显示指定的形式。消息循环使表单能够接收Windows消息(例如,按键,鼠标单击,绘画无效),以使其显示响应性并与用户进行交互。当你调用ShowDialog()一个Form实例,它实际上做了类似的事情,并为在其上形成一个模式消息循环ShowDialog被调用。

两次调用之间没有太大区别。Application.Run确实添加了一些额外的事件处理,使您可以在关闭主窗体时整理一些资源(请参阅Application.ThreadExit)。

建议使用WinForms应用程序启动方法Application.Run,但是我怀疑这更多是一种约定,而不是一条规则。使用最大的理由Application.Run是,如果您想打开多个非模式表单。您可以使用:

new Form().Show();
new Form().Show();
Application.Run();

使用该ShowDialog()方法无法实现此目的,因为其中一种形式必须是模态的。


至于您如何显示登录表单然后如果成功登录则显示主表单的问题,我认为您可以使用:

if (new LoginForm().ShowDialog() == DialogResult.OK)
{
    Application.Run(new MainForm());
}

另一种方法是自己做管道MainFormLoginForm如果登录成功,则在关闭事件中打开一个实例。

2020-05-19