2015-08-31 11 views
5

Sto tentando di risolvere un problema che non è chiaro per me. Quando si chiama Environment.Exit(0), occorrono circa 22 secondi per chiudere l'applicazione.Environment.Exit richiede molto tempo per chiudere l'applicazione

if (AppDomain.CurrentDomain.IsDefaultAppDomain()) 
{ 
    Environment.Exit(exitCode); 
} 

Hai idea di cosa sta succedendo dietro la scena? Anche se forse viene lanciata un'eccezione, ma ho controllato tutte le caselle nella finestra di dialogo delle eccezioni.

+4

Vedo il tuo errore - stai usando 'Environment.Exit'. – Luaan

risposta

2

Ciò che accade dietro le quinte è abbastanza chiaro se si capisce come funzionano le applicazioni .NET e come funziona Environment.Exit.

In breve, Environment.Exit non è il modo più rapido per uscire da un'applicazione arbitraria. Attende ancora l'esecuzione di eventuali finalizzatori in sospeso (se corrono abbastanza velocemente, hanno solo 30 secondi di IIRC totale). Se stai utilizzando, ad es. socket, è perfettamente possibile che i finalizzatori impieghino alcuni secondi per essere eseguiti.

Il modo più semplice per verificare è ovviamente utilizzare il debugger: basta mettere in pausa quando si esegue l'arresto, e si vedranno quali thread sono effettivamente in esecuzione e cosa stanno eseguendo.

+0

Grazie, posso vedere molti thread. C'è qualche comando per uscire senza aspettare che finiscano i thread? – ehh

+1

@ehh Sì, ci sono alcuni modi per farlo. Ma tu davvero non vuoi - in effetti, non dovresti nemmeno usare 'Environment.Exit'. Assicurati solo che tutti i tuoi fili finiscano in modo pulito e sicuro, quindi esci come al solito (ad esempio "return;" nel tuo metodo "Main" o chiudendo il modulo principale di un'applicazione Windows form). – Luaan

+0

Sono sicuro che i thread dovrebbero finire in modo pulito e sicuro, ma perché Environment.Exit non dovrebbe essere usato? – ehh

Problemi correlati