Application.Exit()未按预期工作

时间:2012-08-06 11:10:57

标签: c# winforms toolstrip

我有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不会工作......

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

5 个答案:

答案 0 :(得分:4)

也许查看ShowDialog的结果?

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

using是因为负责调用Dispose()如果您使用ShowDialog(),但 Show()

答案 1 :(得分:4)

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

  

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

所以它说的是,一旦所有消息都被完全处理,它就会退出,但由于你有一条消息需要在对话框关闭后处理,所以必须先完成。您正在正常退出,但是您必须检查null并在null方法中返回do_Login()

答案 2 :(得分:3)

结合Marc的回答,将Application.Exit更改为Environment.Exit(0)

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

答案 3 :(得分:2)

我不认为调用Application.Exit();是退出的好方法。例如,它可能不允许执行任何其他代码来执行清理应用程序关闭。

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

答案 4 :(得分:1)

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