2010-10-25 16 views
11

Qual è il modo migliore per uccidere un'istanza dell'applicazione? Sono consapevole di questi tre metodi:.Il modo migliore per eliminare l'istanza dell'applicazione

Application.Exit()

Environment.Exit (0)

Process.GetCurrentProcess() kill()

qualcuno può dirmi che è meglio o quando si utilizza ciascuno di questi sarebbe appropriato?

risposta

19

linee guida da C# faq:

System.Windows.Forms.Application.Exit() - informa tutte le pompe messaggio che devono terminare, e poi chiude tutte le finestre dell'applicazione dopo 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.

È probabile che non sia consigliabile uccidere il processo.

+0

Grazie, molte buone informazioni. – Eaton

+5

Vale la pena notare che 'Process.GetCurrentProcess(). Kill()' è il modo corretto di terminare un'applicazione se è necessario interromperla immediatamente. Non vorrai aspettare un'applicazione di trading che emetta ordini errati per uscire con grazia. Vuoi uccidere quel cucciolo morto. – 0b101010

0

Solo una risposta rapida, userei sempre l'opzione "Esci" quando funzionerà. È un modo molto più pulito per farlo.

Per "uccidere" un processo significa esattamente questo, e quindi il programma non può eseguire alcun lavoro di pulizia che potrebbe voler fare (come salvare la configurazione, salvare altri file, ecc ...). A meno che tu non sappia qual è il processo e che non ha alcuna "pulizia" da fare, e anche allora, è solo più pulito usare "Esci".

Non sembra esserci alcuna differenza tra le due opzioni "Esci" che si menzionano, scommetterei che il primo sta semplicemente passando implicitamente il valore zero.

+0

Vedo, grazie per le informazioni. Questo è un controllo di sicurezza critico, quindi sarebbe probabilmente meglio per me ucciderlo dato che non voglio che l'app esegua tutto se non riesce questo controllo. – Eaton

2

Se si tratta di un'applicazione Windows Form, utilizzare Application.Exit(). Quello chiuderà il programma piacevolmente.

-4
foreach (Process proc in Process.GetProcessesByName("WindowsFormsApplication1.vshost")) 
     { 

      proc.Kill(); 

     } 
+0

Questo non risponde alla domanda. – nphx

Problemi correlati