Application.Exit() 未按预期工作
本文关键字:工作 Exit Application | 更新日期: 2024-10-25 13:02:52
我有 2 种形式(main
和 login
)。我用这段代码打开登录表单:
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()
的定义如下。
通知所有消息泵它们必须终止,然后在处理完消息后关闭所有应用程序窗口。
所以它的意思是,一旦所有消息都被完全处理,它就会退出,但由于您有一条消息需要在对话框关闭后处理,因此它必须先完成该消息。您正在正确执行退出,但您必须检查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);