Application.Exit() 未按预期工作

本文关键字:工作 Exit Application | 更新日期: 2024-10-25 13:02:52

我有 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根本不起作用......

那么当我点击工具trip时,我将如何使程序的整个执行停止呢?

Application.Exit() 未按预期工作

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

通知所有消息

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

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

也许检查ShowDialog的结果?

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

using是因为如果您使用ShowDialog(),则您有责任呼叫Dispose(),但当您呼叫Show()时则不负责

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

相反,您应该从登录返回一个对话框结果,以指示需要关闭。 然后,主窗体应检查这一点并正常关闭。

结合

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

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

试试这个。 环境退出(0);