2011-08-22 221 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的環境。功能在那裏不應該有很大的區別。