Application.Exit

Sto utilizzando VSTS 2008 + .Net 3.5 + C # per sviluppare l’applicazione Windows Form. La mia confusione è, sembra che Application.Exit non costringa l’applicazione a terminare? In caso contrario, quale metodo dovrei chiamare per far terminare l’applicazione?

MODIFICA 1:

Normalmente il metodo principale è come, come uscire con grazia dalla funzione Main senza chiamare Environment.Exit?

static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); try { Application.Run(new Form1()); } catch (Exception ex) { Console.WriteLine (ex.Message); } } 

grazie in anticipo, George

Application.Exit richiede davvero molto lentamente il loop dei messaggi.

Se vuoi che la tua app esca, il modo migliore è quello di uscire con garbo da Main e chiudere in modo pulito qualsiasi thread non di sfondo aggiuntivo.

Se vuoi essere brutale … Environment.Exit o Environment.FailFast ? nota che questo è duro – quasi come uccidere il tuo Process .

Prova quanto segue:

 Process.GetCurrentProcess().Kill(); 

Environment.Exit non funziona con Winforms e Environment.FailFast lancia la propria eccezione.

Se la tua applicazione non esce con garbo quando chiami Application.Exit c’è (ovviamente) qualcosa che gli impedisce di farlo. Può essere qualsiasi cosa, dall’impostazione di un modulo e.Cancel = true nell’evento FormClosing , a un thread che non è un thread in background ancora in esecuzione. Ti consiglierei di ricercare con attenzione esattamente ciò che mantiene vivo il tuo processo e chiuderlo in un modo piacevole. Ciò dovrebbe rendere la tua applicazione anche ben chiusa.

In genere, in un’applicazione Winforms, dovrebbe essere sufficiente chiudere la maschera principale.

Io uso

 if (System.Windows.Forms.Application.MessageLoop) { // Use this since we are a WinForms app System.Windows.Forms.Application.Exit(); } else { // Use this since we are a console app System.Environment.Exit(1); } 

da http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

Ho avuto lo stesso problema quando ho scoperto di aprire una nuova maschera / finestra all’interno del programma, e solo NASCONDERE quel secondo modulo (non chiudendolo), impedirebbe al modulo principale di uscire correttamente tramite Application.Exit ();

Ci sono due soluzioni in questo caso. Per prima cosa è sufficiente utilizzare Close () nel modulo principale anziché Application.Exit (). La seconda soluzione è usare il seguente codice:

 if (secondForm != null && !secondForm.IsDisposed) secondForm.Dispose(); 

Ho scoperto che semplicemente tutto ciò che devi fare è installare Application.exit e tutto ciò che devi fare è inserire End. Semplicemente basta che il comando End lo chiuda