1

我有 2 个表格(mainlogin)。我用这段代码打开登录表单:

toolStripProgressBar1.Value = 50;
toolStripStatusLabel_dynamic.Text = "Proberen toegang te verkrijgen...";
Login login = new Login();
login.ShowDialog();
do_login();

我在登录表单的顶部有一个工具条菜单,eventhandler如下所示:

private void afsluitenToolStripMenuItem_Click(object sender, EventArgs e) {
    Application.Exit();
}

但是在两个表单都关闭后,程序继续工作(它调用函数do_login。)但是变量没有设置,表单消失了,所以do_login根本不起作用......

那么,当我单击工具条时,如何使程序的整个执行停止?

4

5 回答 5

4

也许检查结果ShowDialog

using(var login = new Login()) {
    if(login.ShowDialog() == DialogResult.OK) {
        do_login();
    }
}

(这using是因为有责任打电话Dispose(),如果你使用ShowDialog(),但不是当你打电话Show()

于 2012-08-06T11:13:53.203 回答
4

您将不得不解决它,因为 的定义Application.Exit()如下。

通知所有消息泵它们必须终止,然后在处理完消息后关闭所有应用程序窗口。

因此,它的意思是,一旦所有消息都已完全处理,它将退出,但是由于您有一条消息需要在对话框关闭后处理,因此必须先完成该消息。null您正在正确地执行退出,但如果它nulldo_Login()方法中,您将不得不检查并返回。

于 2012-08-06T11:14:17.873 回答
3

结合 Marc 的回答,Application.Exit改成Environment.Exit(0).

private void afsluitenToolStripMenuItem_Click(object sender, EventArgs e) { 
    Environment.Exit(0);
}
于 2012-08-06T11:21:55.297 回答
2

我不认为调用 Application.Exit(); 是一个很好的退出方式。一方面,它可能不允许执行任何其他代码,这些代码可能已经到位以在应用程序关闭时进行清理。

相反,您应该从 Login 返回 DialogResult 以指示需要关闭。然后主窗体应该检查这一点并优雅地关闭。

于 2012-08-06T11:18:16.327 回答
1

试试这个。Environment.Exit(0);

于 2012-08-06T11:18:05.827 回答