PDA

View Full Version : [C#]terminare l'applicazione dopo catch di una eccezione


matcy
01-07-2004, 14:55
questo pezzo di codice l'ho messo nel costruttore del form principale (quello chiamato da Application.Run(....); )

try
{
this.odcCommon.Open();
}
//se genera una eccezione loggo tutto nella stringa errorMessages
catch (OleDbException e)
{
for (int i=0; i < e.Errors.Count; i++)
{
errorMessages += "Index #" + i + "\n" +
"Messagge: " + e.Errors[i].Message + "\n" +
"NativeError: " + e.Errors[i].NativeError + "\n" +
"Source: " + e.Errors[i].Source + "\n" +
"SQLState: " + e.Errors[i].SQLState + "\n";
}
errorMessages += "L'applicazione verrà terminata";
}
if (!(errorMessages=="")) //se ci sono errori li visualizzo e chiudo l'applicazione
{
MessageBox.Show(errorMessages,"File non trovato", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
Application.Exit(); //NON FUNZIA, resta aperto il form
}

apro uina connessione, se il gestore di eccezioni dice di no butto fuori una msgbox con l'errore e poi provo a chiudere l'applicazione con appl.exit()
risultato: msgbox funziona, ma non so perché non mi chiude l'applciazione e dopo un attimo che ho chiuso la msgbox viene visualizzato il form.

matcy
01-07-2004, 15:14
mi rispondo da solo: ho usato una variabile bool che ho controllato nell'evento form_load e da lì appl.exit funziona

end.is.forever
02-07-2004, 01:18
Originariamente inviato da matcy
if (!(errorMessages==""))

Sostituisci =="" con .Equals("")
non sono sicuro che .NET supporti l'operator overloading per == quindi suppongo che come in java == faccia un test che da true solo se gli operandi puntano allo stesso oggetto, mentre se usi il metodo Equals di object overridato da String vai sul sicuro che ti fa un confronto di stringa carattere per carattere
:)

Mixmar
02-07-2004, 08:25
Credo che end.is.forever abbia ragione.

matcy
03-07-2004, 19:30
no funzia con ==
l'ho usato anche altrove

Mixmar
04-07-2004, 08:44
Prova a usare qualche metodo della classe String creato "apposta".... non mi ricordo più, mi ci sarà qualcosa tipo "IsVoid"... sennò, prova a usare Length:



if(!(errorMessages.Length==0)) {

}

end.is.forever
04-07-2004, 11:53
Se non sbaglio c'è la proprieta' String.Empty
Ciao

pipozzolo
05-07-2004, 10:49
Originariamente inviato da end.is.forever
Sostituisci =="" con .Equals("")
non sono sicuro che .NET supporti l'operator overloading per == quindi suppongo che come in java == faccia un test che da true solo se gli operandi puntano allo stesso oggetto, mentre se usi il metodo Equals di object overridato da String vai sul sicuro che ti fa un confronto di stringa carattere per carattere
:)

sbagliato, == è overloadato su equals in c#, quindi va bene.
Il discorso che fai è giusto nel caso di Java.

pipozzolo
05-07-2004, 10:53
ERRORE :P