2011-08-22 12 views
62

Qual è la procedura consigliata per chiudere un'applicazione C#?Chiusura di applicazioni

Ho letto che è possibile utilizzare:

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

Ma qual è la differenza?

Inoltre, per quanto riguarda Environment.Exit (0), ho utilizzato i codici di uscita prima quando si lavora con Java ma non ho mai compreso appieno il loro scopo. Che ruolo giocano quando si esce da un'applicazione in C#?

+2

dipende dalla vostra applicazione. Se scrivi un demone, restituisci 0; se usi l'applicazione Windows, quindi chiudi il modulo principale. Non usare la terminazione forzata. – Cynede

+1

Eventuali duplicati http://stackoverflow.com/questions/1312885/application-exit-vs-application-exitthread-vs-environment-exit –

+1

@jalal potrebbe essere il tuo giusto alcuni .. Ma, non dirò che è duplicato .. Ho già aggiunto questo link nel mio post qui sotto prima di un minuto del tuo commento. Si prega di non contrassegnare come duplicato, spero che valga la pena. –

risposta

64

System.Windows.Forms.Application.Exit() - Informa tutte le pompe di messaggi che devono terminare e quindi chiude tutte le finestre dell'applicazione dopo che i messaggi sono stati elaborati. Questo metodo interrompe tutti i loop di messaggi in esecuzione su tutti i thread e chiude tutte le finestre dell'applicazione. Questo metodo non forza l'uscita dell'applicazione. Il metodo Exit viene in genere richiamato da un loop di messaggi e forza Esegui per tornare. Per uscire da un loop di messaggi solo per il thread corrente, chiama ExitThread. Questa è la chiamata da utilizzare se si esegue un'applicazione WinForms. Come linea guida generale, usa questa chiamata se hai chiamato System.Windows.Forms.Application.Run.

System.Environment.Exit (exitCode) - Termina questo processo e fornisce al sistema operativo sottostante il codice di uscita specificato. Per questa chiamata è necessario disporre delle autorizzazioni SecurityPermissionFlag.UnmanagedCode. In caso contrario, si verifica un errore SecurityException. Questa è la chiamata da utilizzare se si sta eseguendo un'applicazione console.

spero che sia meglio usare Application.Exit

controllo questo collega Application.Exit() vs Application.ExitThread() vs Environment.Exit() e http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

+5

Potrebbe essere opportuno sottolineare esplicitamente che prima di chiamare 'Application.Run' la tua unica scelta è' Environment.Exit' come 'Application.Exit' non avrà alcun effetto. – Carsten

+1

Ho due moduli login e modulo principale. quando il pulsante di accesso ha fatto clic sul modulo di accesso, utilizzo this.hide() quando si fa clic sul login e si apre la forma principale e da lì uso hide quando il modulo è chiuso, quindi compare nuovamente il modulo di accesso. se eseguo l'applicazione e clicco sul pulsante di login e poi chiudo mainform più volte ripetutamente e quando clicco sul pulsante exit (System.Windows.Forms.Application.Exit()) nel modulo di login, mostrerà tutti i moduli di login che mi sono nascosto. ma se uso (System.Environment.Exit (0)) chiuderà e chiuderà completamente l'applicazione. tutto sommato direi che il successivo è il migliore –

16

Application.Exit è per le applicazioni Windows Form - informa tutte le pompe di messaggi che devono terminare, attende che finiscano di elaborare gli eventi e quindi interrompe l'applicazione. Si noti che non forza necessariamente l'uscita dell'applicazione.

Environment.Exit è applicabile a tutte le applicazioni Windows, tuttavia è destinato principalmente all'utilizzo in applicazioni console. Termina immediatamente il processo con il codice di uscita indicato.

In generale si consiglia di utilizzare Application.Exit in applicazioni Windows Form e Environment.Exit in applicazioni console, (anche se preferisco lasciare che il punto di corsa Main metodo/ingresso al completamento, piuttosto che chiamare Environment.Exit in applicazioni di console).

Per ulteriori dettagli, consultare la documentazione MSDN.

+0

Grazie per la risposta. Ho bisogno di uscire dalla mia applicazione da una classe diversa piuttosto che da Program.cs ed è un'applicazione console, e funziona perfettamente. Potrei usare anche la parola chiave return e credo che lascerebbe il Main finish in esecuzione, ma in questo caso non fa differenza. – Radmation

0

Quale ruolo svolgono quando si esce da un'applicazione in C#?

Lo stesso di ogni altra applicazione. Fondamentalmente vengono restituiti al chiamante. Irrilevante se la partenza era un doppio click di iicon. Rilevante è la chiamata è un file batch che decide se l'app ha funzionato sul codice di ritorno. COSÌ, a meno che tu non scriva un programma che ne ha bisogno, il codice di ritorno è irrilevante.

Ma qual è la differenza?

Uno viene dall'ambiente uno da System.Windows.Forms? .Application. Funzionalmente non dovrebbe esserci molta differenza.