2010-11-04 3 views
3

Au démarrage d'une application Windows Forms, j'ai lu un fichier XML. Si ce fichier n'existe pas ou n'a pas un certain paramètre je veux afficher un MessageBox à l'utilisateur indiquant le problème, puis fermez l'application.Comment quitter une application Windows Forms immédiatement après l'affichage d'un MessageBox lorsqu'une erreur au démarrage se produit?

J'ai essayé de le faire en cas Load de la forme principale avec Application.Exit() comme ceci:

private void MainForm_Load(object sender, EventArgs e) 
{ 
    if (!StartupSettingsCorrect()) 
    { 
     MessageBox.Show("Blabla... Can't start application."); 
     Application.Exit(); 
    } 

    // Other stuff... 
} 

Mais cela ne semble pas être propre. (L'application est en cours d'exécution mais "invisible" sans forme sur l'écran.)

Quelle est au contraire la meilleure façon et le meilleur endroit pour un arrêt net dans cette situation?

Merci de votre aide à l'avance!

Répondre

10

Environment.Exit() devrait faire l'affaire. Au moins, cela a fonctionné pour moi dans la situation que vous avez décrite.

Selon MSDN, cette méthode

Met fin à ce processus et donne le système d'exploitation sous-jacent du code de sortie spécifié.

+0

Merci, ça marche bien! – Slauma

+1

'Environment.Exit (0)' –

1

La méthode Application.Exit arrête tous un message en cours d'exécution en boucle sur tous les sujets et ferme toutes les fenêtres d'application. Mais selon le moment où cela est appelé, cela ne force pas forcément le processus à se terminer. Si vous appelez Application.Exit avant de charger votre formulaire principal, cela devrait fonctionner.

Une autre solution serait de fermer votre formulaire principal - le reste sera alors géré pour vous. C'est l'équivalent d'utiliser Application.Shutdown.

Sinon, vous pouvez utiliser Environment.Exit. Je crois que ceci termine le processus sans dérouler la pile et sans exécuter finalement des blocs. Donc, c'est très impoli, mais cela peut ne pas être un problème dans votre contexte actuel.

3

Lire le fichier XML dans la méthode Main du fichier Program.cs (doit être générée automatiquement pour vous). Si vous obtenez une erreur, ne chargez pas le formulaire.

static void Main() 
    { 
     if (!StartupSettingsCorrect()) 
     { 
      MessageBox.Show("Blabla... Can't start application."); 
     } 
     else 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new MainForm()); 
     } 
    } 
+0

Merci, ça marche aussi bien! Mais j'ai décidé pour la solution simple Environment.Exit maintenant, car il n'y avait presque aucun changement de code nécessaire. – Slauma

2

Cette technique évite le démarrage de la principale forme en premier lieu, si certaines conditions préalables ne sont pas remplies.

Votre application ne sera pas déchargée jusqu'à ce que vous sortiez du MessageBox.

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    [STAThread] 
    static void Main() 
    { 
     if (!StartupSettingsCorrect()) 
     { 
      MessageBox.Show("Blabla... Can't start application."); 
     } 
     else 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
     } 
    } 
} 
1

Environment.Exit() est recommandé uniquement pour Applications Console.

Pour Winforms, utilisez Application.Exit()

Si vous voulez quitter le programme avant de charger le formulaire principal, l'exemple fourni par « colinsmith » est bon!

0

En Form_Load:

Me.Visible = False 

if yourCheckNotOk then 
    MessageBox("check failed..") 
    Me.close() 
else 
    ... 
    ... 
    ... 
    Me.Visible = True 
end if 

Testé avec VS 2010. (En supposant le mode d'arrêt est réglé sur « Quand formulaire de démarrage se ferme » dans les paramètres du projet et événement Load est l'événement de votre formulaire de démarrage)

0

Form.Dispose() peut être utilisé pour libérer complètement les ressources détenues par ce programme. Je pense que ce serait bien pour effacer les ressources et pour quitter complètement une application.

Questions connexes