How do I properly exit a C# application?(如何正确退出C#应用程序?)
问题描述
我有一个用C#发布的应用程序。每当我通过单击红色的退出按钮关闭主窗体时,窗体都会关闭,但不会关闭整个应用程序。当我尝试关闭计算机时,我发现了这一点,随后被许多子窗口轰炸,并添加了MessageBox
警报。
我尝试了Application.Exit
,但它仍然调用所有子窗口和警报。我也不知道如何使用Environment.Exit
,也不知道要放入哪个整数。
此外,每当我的窗体调用FormClosed
或FormClosing
事件时,我使用this.Hide()
函数关闭应用程序;这是否会影响我的应用程序的行为?
推荐答案
来自msdn:
Application.Exit
通知所有消息泵必须终止,然后在处理完消息后关闭所有应用程序窗口。如果您已调用Application.Run(WinForms应用程序),此方法将停止所有线程上正在运行的所有消息循环,并关闭应用程序的所有窗口。
Environment.Exit
终止此进程并向底层操作系统提供指定的退出代码。这是您使用控制台应用程序时要调用的代码。
这篇文章Application.Exit vs. Environment.Exit指向了一个很好的提示:
您可以通过检查System.Windows.Forms.Application.MessageLoop
属性来确定System.Windows.Forms.Application.Run
是否已被调用。如果为True,则已调用Run,您可以假定WinForms应用程序正在执行,如下所示。
if (System.Windows.Forms.Application.MessageLoop)
{
// WinForms app
System.Windows.Forms.Application.Exit();
}
else
{
// Console app
System.Environment.Exit(1);
}
引用:Why would Application.Exit fail to work?
这篇关于如何正确退出C#应用程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何正确退出C#应用程序?


- Windows 喜欢在 LINUX 中使用 MONO 进行服务开发? 2022-01-01
- 是否可以在 .Net 3.5 中进行通用控件? 2022-01-01
- 在 C# 中异步处理项目队列 2022-01-01
- 带问号的 nvarchar 列结果 2022-01-01
- 使用 rss + c# 2022-01-01
- 在 LINQ to SQL 中使用 contains() 2022-01-01
- CanBeNull和ReSharper-将其用于异步任务? 2022-01-01
- 为什么 C# 中的堆栈大小正好是 1 MB? 2022-01-01
- Azure Active Directory 与 MVC,客户端和资源标识同一 2022-01-01
- C# 通过连接字符串检索正确的 DbConnection 对象 2022-01-01