2012-10-24 10 views
41

seguito sono i modi con cui siamo in grado di uscire da un'applicazione:WinForms: Application.Exit vs Enviroment.Exit vs Form.Close

  1. Enviroment.Exit(0)
  2. Application.Exit()
  3. Form.Close()

Cosa è la differenza tra questi tre metodi e quando usarli?

+5

Questa non è una domanda duplicato. Non sto chiedendo quale usare per uscire dall'applicazione. Sto solo chiedendo la differenza tra questi metodi mentre esegue un'operazione simile. –

risposta

75

Il metodo corretto sarebbe Application.Exit(). Secondo lo Documentation, termina tutti i loop di messaggi e chiude tutte le finestre dando così ai tuoi moduli la possibilità di eseguire il loro codice di pulizia (in Form.OnClose ecc.).

Environment.Exit semplicemente uccidere il processo. Se qualche forma ha per es. modifiche non salvate non avrebbe alcuna possibilità di chiedere all'utente se vuole salvarle. Anche le risorse (connessioni al database, ecc.) Non possono essere rilasciate correttamente, i file potrebbero non essere scaricati, ecc.

Form.Close fa esattamente ciò che dice: chiude un modulo. Se sono aperte altre forme (forse non ora ma in alcune versioni future dell'applicazione), l'applicazione non verrà chiusa.

Ricordare che se si utilizza il multithreading, Application.Exit() non interromperà i thread (e quindi l'applicazione continuerà a funzionare in background, anche se la GUI è terminata). Di conseguenza, è necessario prendere le misure necessarie per eliminare i thread, o nella funzione principale (ad esempio Program.Main()) o quando nell'evento OnClose del modulo principale.

+2

+1 per il riferimento alla documentazione –

+3

È possibile impostare la proprietà IsBackground sui thread in modo che non impediscano il completamento del processo. –

+1

È davvero vero ciò che dici di flushing dei file? Quando un processo viene interrotto, il sistema operativo deve chiudere tutti gli handle esistenti che svuotano anche le maniglie. –

2

stanno tutti bene. ma form.Close() non chiude l'applicazione chiude il modulo e dopo questo il metodo principale restituisce un int (codice di uscita).

se si desidera che l'applicazione esce con exitcodes utilizzano Environmet.Exit(exitcode) o restituire l'ExitCode nella principale metodo

Problemi correlati