Utilizzo di Application.exit

mercoledì 14 gennaio 2015 - 15.43

massimo1967 Profilo | Newbie

Buongiorno, ho un progetto vb.net 2005 framework 4 abbastanza complesso. Complesso non tanto come codice, ma complesso per il fatto che non posso sapere a priori quali e quante form (non MDI) siano aperte, e nemmeno quali classi l'utente utilizzi, dipente dal file di configurazione che viene scritto e che determina l'utilizzo del programma.

Ora, alla pressione del tasto ESCI devo chiudere QUALUNQUE COSA riguardante l'applicazione, che poi può essere rilanciata quando l'utente ne ha necessità ... quante volte vuole (normale no?)

Per uscire utilizzo APPLICATION.EXIT, ed effettivamente fa il proprio dovere, ma mi chiedevo ..... siamo sicuri che chiuda tutto a livello di RAM ? E' il metodo giusto di fare le cose? Garbage collector è a posto?

grazie a chi voglia fugare i miei dubbi e magari indicarmi se esiste un metodo migliore.
Massimo Marchetti

0v3rCl0ck Profilo | Guru

Si direi che va bene, di fatto l'applicazione viene completamente uccisa in quel modo, ogni form creata da quella applicazione viene chiusa, e poi il processo si chiude.

Questa è una parte decompilata del processo di chiusura:

private static bool ExitInternal() { bool flag; bool flag1 = false; lock (Application.internalSyncObject) { if (!Application.exiting) { Application.exiting = true; try { if (Application.forms != null) { foreach (Form openFormsInternal in Application.OpenFormsInternal) { if (!openFormsInternal.RaiseFormClosingOnAppExit()) { continue; } flag1 = true; break; } } if (!flag1) { if (Application.forms != null) { while (Application.OpenFormsInternal.Count > 0) { Application.OpenFormsInternal[0].RaiseFormClosedOnAppExit(); } } Application.ThreadContext.ExitApplication(); } } finally { Application.exiting = false; } return flag1; } else { flag = false; } } return flag; }

comunque per sicurezza controlla tu stesso dal task manager se semplicemente il processo/eseguibile è ancora presente o meno tra la lista dei processi (in task manager -> details /win8).


Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic

massimo1967 Profilo | Newbie

Grazie, avevo già controllato su task manager e tutto mi sembrava a posto, mi restava un dubbio che mi hai fugato. Grazie
Massimo Marchetti
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5