Domanda

Ho una condizione in cui devo chiudere l'applicazione e quindi chiamo this.Dispose () quando si imposta un flag certian.

In un primo momento ho pensato che fosse un problema di funzioni chiamare dopo che io chiamo this.Dispose () e così ho spostato il codice per essere l'ultima cosa ha chiamato, ma ho ancora un "ArgumentException è stata gestita" "parametro non è valido ". Sul Application.Run (nuova myApp ();. Riga

Che cosa sto facendo di sbagliato? Mi sono perso qualcosa lungo la strada? O forse c'è un modo migliore per chiudere l'applicazione?

È stato utile?

Soluzione

Prova a usare Application.Exit() per chiudere l'applicazione.

Quando si utilizza Application.Run(new MyForm());, un ciclo di messaggi viene creato sul filo utilizzando l'oggetto modulo come modulo principale. Si cerca di recapitare i messaggi Win32 che stanno arrivando per l'applicazione ai rispettivi oggetti. Tuttavia, quando si chiama Dispose() sull'oggetto modulo, non hai ancora usciti dal ciclo di messaggi. Quando si tenta di recapitare il messaggio accanto al tuo oggetto form, non riesce dal momento che è già disposto e genera l'eccezione. Si dovrebbe o richiedere il modulo per essere chiuso (chiamando Close sul modulo), che sarà poi chiedere il modulo per elaborare l'evento e se portata a termine, uscire dal ciclo di messaggi dopo. L'altro modo (modo più diretto) è per arrestare il ciclo di messaggi sul filo del tutto chiamando Application.Exit() che causerà tutte le forme legate da chiudere.

Altri suggerimenti

Si dovrebbe usare this.Close () piuttosto che this.Dispose () per chiudere il modulo principale.

se si sta chiudendo l'applicazione e lo scarico del dominio di applicazione non si ha realmente bisogno di chiamare Dispose () perché tutto dal dominio di applicazione verrà rimosso dalla memoria così.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top