2009-09-24 4 views

Odpowiedz

15

Najbardziej oczywistą różnicą jest to, że można wywołać Environment.Exit z dowolnego miejsca w kodzie. Poza tym:

  • Główne zakończenie nie zakończy procesu, jeśli są wykonywane inne wątki; Environment.Exit przerwie to i tak.
  • Environment.Exit kończy proces bez rozwijania rozwijania stosu i wykonywania bloków (co najmniej zgodnie z moimi eksperymentami). Oczywiście po powrocie z Main jesteś już na najwyższym poziomie jeśli chodzi o kod zarządzany.
  • Zarówno dać finalizatory szansę wykonać przed procesem naprawdę wyłącza
  • Environment.Exit wymaga odpowiednich uprawnień zabezpieczeń, więc nie będzie pracować dla mniej zaufanych aplikacji.

Po przejrzeniu aktualizacji pytania nie jestem do końca pewien, co masz na myśli. W obu przypadkach proces ten będzie po prostu wyjście z kodem 2 ...

+0

Zobacz http://stackoverflow.com/questions/713805/net-finalizers-and-exit0, aby uzyskać szczegółowe informacje na temat finalizacji na końcu procesu. –

5

Environment.Exit(2) może być używany wszędzie. return 2 tylko w ramach funkcji Main().

+0

+1 Stwierdzenie oczywistego, ale i dobrego punktu. –

+0

Zaktualizowane pytanie - czy są jakieś różnice poza aplikacją? –

2

Jeśli robisz testów jednostkowych i nazywając główny

Program.Main(args); 

wtedy Environment.exit zawsze odzwierciedlają awarię. Gdzie użycie zwrotu będzie działać zgodnie z oczekiwaniami.