结案申请


68

关闭C#应用程序时的最佳实践是什么?

我读过您可以使用:

Environment.Exit(0); or Application.Exit();

但是有什么区别呢?

此外,关于Environment.Exit(0),我在使用Java之前曾使用过退出代码,但从未完全理解它们的用途。当退出C#应用程序时,它们扮演什么角色?


2
取决于您的应用程序。如果编写恶魔,则返回0;否则,返回0。如果您使用Windows应用程序,则关闭主窗体。不要使用强制终止。
2011年


1
@jalal也许是您的权利。.但是,我不会说它是重复的。.在您发表评论之前,我已经在下面的帖子中添加了该链接。请不要将其标记为重复,希望它值得。
Naga Harish M

@Windows我们通常将问题标记为重复,如果存在重复的版本,我已经投票决定将其关闭,这不是不可撤消的操作,但是将问题标记为重复不会损害您的答案,用户仍然可以接受。
Jalal Said

THX @贾拉勒,但我不是在寻求接受我的回应。之前的某个时候,我也有同样的事情(重复)。我对此感到非常沮丧,因为即使在Google或相关的问题中也看不到该问题。然后,我将如何知道它已经被问到了...无论如何,请不要再从我这边再提出一个小要求。
Naga Harish M

Answers:


70

System.Windows.Forms.Application.Exit()-通知所有消息泵它们必须终止,然后在处理完消息后关闭所有应用程序窗口。此方法停止所有线程上所有正在运行的消息循环,并关闭应用程序的所有窗口。此方法不会强制应用程序退出。Exit()通常从消息循环内调用该方法,并强制Run()返回。要仅退出当前线程的消息循环,请调用ExitThread()。如果您正在运行Windows窗体应用程序,则可以使用此调用。一般而言,如果您已致电,请使用此通话System.Windows.Forms.Application.Run()

System.Environment.Exit(exitCode)-终止此过程,并为底层操作系统提供指定的退出代码。此调用需要您具有SecurityPermissionFlag.UnmanagedCode权限。否则,将SecurityException发生错误。如果正在运行控制台应用程序,则可以使用此调用。

我希望最好用 Application.Exit

另请参阅以下链接:


5
可能是值得指出的明确规定,打电话之前Application.Run你唯一的选择是Environment.Exit因为Application.Exit不会有任何效果。
卡斯滕

1
我有两种形式的登录名和主要形式。当单击登录表单上的登录按钮时,单击登录并打开主表单时,我将使用this.hide();在关闭表单时,我将从那里使用hide,然后再次显示登录表单。如果我运行该应用程序并单击登录按钮,然后多次关闭主窗体,当我单击登录表单上的退出(System.Windows.Forms.Application.Exit())按钮时,它将显示所有我隐藏了。但是如果我使用(System.Environment.Exit(0)),它将完全关闭并退出应用程序。总而言之,我会说最好的是后者
r.hamd

17

Application.Exit适用于Windows Forms应用程序-它通知所有消息泵应终止它们,等待它们完成事件处理,然后终止该应用程序。请注意,它不一定会强制应用程序退出。

Environment.Exit适用于所有Windows应用程序,但是主要用于控制台应用程序。它立即使用给定的退出代码终止该过程。

通常,您应该Application.Exit在Windows Forms应用程序和Environment.Exit控制台应用程序中使用((尽管我更喜欢让Main方法/入口点运行到完成而不是调用)Environment.Exit在控制台应用程序中)。

有关更多详细信息,请参见MSDN文档。


1
感谢你的回答。我需要从其他类而不是Program.cs退出我的应用程序,它是一个控制台应用程序,而且效果很好。我也可以使用关键字return,这会让Main完成运行,但是在这种情况下没有区别。
Radmation

0

当退出C#应用程序时,它们扮演什么角色?

与其他所有应用程序相同。基本上,它们会返回给呼叫者。如果您是从iicon双击开始的,则无关紧要。与此相关的是该调用是一个批处理文件,它决定应用程序是否对返回码起作用。因此,除非您编写需要此程序的程序,否则返回dcode无关紧要。

但是有什么区别呢?

一种来自环境,一种来自System.Windows.Forms?.Application。功能上应该没有太大的区别。


0

对我来说最好的方法是

 Thread.CurrentThread.Abort();

并强制关闭应用。


为什么比这更好Application.Exit()?那是应用程序运行多个后台线程吗?
罗伯特·辛诺拉兹基
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.