2011-08-22 168 views
62

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

我已阅读,你可以使用:

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

但有什么区别?

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

+2

取决于你的应用。如果你写一个恶魔,然后返回0;如果您使用Windows应用程序,则关闭主窗体。不要使用强制终止。 – Cynede

+1

可能的重复http://stackoverflow.com/questions/1312885/application-exit-vs-application-exitthread-vs-environment-exit –

+1

@jalal可能是你的一些权利..但是,我不会说它是重复的..我已经在你的评论的最后一分钟之前在我的帖子中添加了该链接。请不要标记为重复,它希望它值得。 –

回答

64

System.Windows.Forms.Application.Exit() - 通知所有消息泵必须终止,然后在消息处理后关闭所有应用程序窗口。此方法停止所有线程上正在运行的消息循环,并关闭应用程序的所有窗口。此方法不强制应用程序退出。 Exit方法通常在消息循环中调用,并强制Run返回。要仅退出当前线程的消息循环,请调用ExitThread。如果您正在运行WinForms应用程序,则这是要使用的调用。作为一般指导,如果您调用System.Windows.Forms.Application.Run,​​则使用此调用。

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

我希望这是最好用Application.Exit

检查该链接Application.Exit() vs Application.ExitThread() vs Environment.Exit()http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

+5

可能值得指出的是,在你调用Application.Run之前,你唯一的选择是'Environment.Exit',因为'Application.Exit'将不起作用。 – Carsten

+1

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

16

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

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

一般来说,你应该使用Application.Exit在Windows窗体应用程序和Environment.Exit在控制台应用程序,(虽然我更喜欢让Main方法/入口点运行到完成,而不是在控制台应用程序调用Environment.Exit)。

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

+0

感谢您的答案。我需要退出我的应用程序从一个不同的类而不是Program.cs,它是一个控制台应用程序,这很好。我可以使用关键字返回以及我相信,这将让主要完成运行,但它在这种情况下没有任何区别。 – Radmation

0

它们在C#中退出应用程序时扮演了什么角色?

与其他应用程序相同。基本上他们会返回给调用者。如果开始是一个iicon双击,则无需担心。相关的是调用是一个批处理文件,它决定应用程序是否在返回码上工作。所以,除非你编写一个需要这个的程序,否则返回代码是无关紧要的。

但是有什么区别?

一个来自System.Windows.Forms?.Application的环境。功能在那里不应该有很大的区别。