2009-09-24 12 views

risposta

15

La differenza più ovvia è che è possibile chiamare Environment.Exit da qualsiasi posizione nel codice. A parte questo:

  • La finitura principale non terminerà il processo se sono in esecuzione altri thread in primo piano; Environment.Exit interromperà comunque il processo.
  • Environment.Exit termina il processo senza srotolando lo stack ed eseguendo infine blocchi (almeno secondo i miei esperimenti). Ovviamente quando si torna da Main si è già al livello più alto per quanto riguarda il codice gestito.
  • Entrambi danno finalizzatori la possibilità di eseguire prima del processo davvero si spegne
  • Environment.Exit richiede l'autorizzazione di protezione adeguato, in modo da non funzionerà per le applicazioni meno fidati.

Avendo visto l'aggiornamento della domanda, non sono del tutto sicuro di cosa intendi. In entrambi i casi il processo sarà solo uscire con un codice di 2 ...

+0

Vedere http://stackoverflow.com/questions/713805/net-finalizers-and-exit0 per dettagli sulla finalizzazione alla fine del processo. –

5

Environment.Exit(2) può essere utilizzato ovunque. return 2 solo all'interno della funzione Main().

+0

+1 Dichiarare l'ovvio, ma comunque un buon punto. –

+0

Domanda aggiornata: c'è qualche differenza dall'esterno dell'applicazione? –

2

Se si sta facendo un test di unità e chiamando principale

Program.Main(args); 

poi Environment.Exit rifletterà sempre un fallimento. Dove l'utilizzo del reso funzionerà come previsto.

Problemi correlati