2010-09-07 2 views
0

Dans mon événement load sur un formulaire, j'appelle une méthode dans un bloc try catch. Quand une exception se produit, je montre un message à l'utilisateur et après je veux fermer le formulaire. Il ressemble à ceci (code événement Load):Pourquoi Close() ne ferme-t-il pas le formulaire dans l'événement load?

try 
{ 
    Metehod(); 
} 
catch(DatabaseException ex) 
{ 
    MessageBox.show("db error! " + ex.Message); 
    this.Close(); 
} 
catch(Exception ex) 
{ 
    MessageBox.Show("Unknown error!" + ex.Message); 
    this.Close(); 
} 

Mais, quand this.CLose() est appelé, il ne ferme pas la forme, non, le code continue à courir jusqu'à la fin de l'événement de chargement!

Pourquoi est-ce? Est-ce un comportement logique?

Répondre

4

Oui, c'est un comportement logique. L'appel de Close() ne renvoie pas le contrôle à l'appelant. La méthode continuera l'exécution à moins que vous ne le disiez autrement. Mettre un return après chaque this.Close() fait l'affaire.

3

C'est par conception parce que Loadoccursavant un formulaire est affiché pour la première fois. Donc Close() n'a aucun effet puisque trois événements plus tard dans le Formlife cycle, le formulaire est montré.

Pour arrêter le cycle, utilisez une solution de rechange.

Questions connexes