[C#] Quitter l'application dans le constructeur MainForm()

scoubidou944
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
- 3 juin 2004 à 01:31
Noib
Messages postés
1
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
24 février 2012
- 24 févr. 2012 à 16:29
De retour dans les problèmes simples qui bouffent la vie ;p
J'ai une appli avec pour formulaire principal l'objet MainForm.
Ce dernier appelle la fonction InitializeComponent() généré par Visual Studio et ensuite, je peux poser mon code d'init.

Dans ce code d'init justement, j'ouvre une boite de dialogue pour choisir différentes options dont celle de quitter si l'utilisateur se rend compte qu'il a 2 mains gauches & 10 pouces et qu'il n'a donc pas cliqué sur la bonne appli.

Ma dialog retourne DialogResult.OK ou DialogResult.Cancel jusque la aucun pb.

Par contre :
this.Close();
dans le cas du Cancel, bah ca marche pas :(.

Une ID ?

Thx.

Vince
----------------------------
C++ forever
C# amateur

9 réponses

cs_Crazyht
Messages postés
1522
Date d'inscription
mardi 18 décembre 2001
Statut
Membre
Dernière intervention
21 août 2010
8
3 juin 2004 à 07:34
Donc le user a 12 doi :)

Application.Exit (); devrait fonctionner.

A++

:-p Crazyht :)

[Admin Codes-Sources]
[Membre Developer-Association]

Un programmeur, c'est quelqu'un qui résout pour toi, de façon incompréhensible, un problème que tu ignorais avoir...
0
crack_xp
Messages postés
91
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
25 janvier 2007

4 juin 2004 à 10:35
Effectivement ....
cependant j'aimerai auouter des pt truc a la fermeture de l'apli.

il ne faut pas oublier de liberer les resources deja utilisées :

this.Dispose();

//Si un thread tourne :
Application.ExitThread();

et ainsi de suite .....

NO TIME TO WASTE
0
scoubidou944
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

4 juin 2004 à 12:09
Quelle belle erreur en fin de Main() :
An unhandled exception of type 'System.ObjectDisposedException' occurred in system.windows.forms.dll

Additional information: Impossible d'accéder à un objet supprimé nommé "MainForm".

J'ai essayé différentes combinaisons de cette fonction :
void LeaveApplication ()
{
this.Dispose ();
this.Close();
Application.ExitThread ();
Application.Exit ();
}

Une ID ?

----------------------------
C++ forever
C# amateur
0
scoubidou944
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

4 juin 2004 à 12:25
Le problème vient en fait que la procédure de 'quittage' est dans le constructeur de MainForm.
On a donc le Main() suivant :

static void Main()
{
MainForm oForm;

oForm = new MainForm();
Application.Run(oForm);
}

Et donc le plantage a lieu lors de l'appel de Application.Run puisque l'objet est valide mais le constructeur a appelé la fin de l'appli (le destructeur etant appelé implitement après Application.Run()

----------------------------
C++ forever
C# amateur
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ppao
Messages postés
12
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
5 janvier 2006

9 juin 2004 à 13:20
Si tu reçoit un DialogResult.Cancel, tu peux lancer un thread qui va dormir un peu et qui vérifie à intervalles réguliers la propriété Created de ta Form, si c'est true, tu met un this.Close(), sinon le thread se rendor un peu etc...

Le framework met la propriété Created à true à la fin du constructeur d'une Form.

Comme ça toutes les initialisations se font, mais le framework peu libéréer les resources lors du Close() et quitter l'application.

(On peut aussi utiliser l'idée pour implémenter un splashscreen en adaptant un peu.)
0
cs_gluk
Messages postés
43
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
25 avril 2008

12 nov. 2009 à 11:20
Comme ça

// procédure de fermeture de l'application
public void closeAPP(){
if( !this.Created ){
Timer oTimer = new Timer();
oTimer.Tick += delegate { this.closeAPP(); };
oTimer.Interval = 500;
oTimer.Start();
return;
}
this.Dispose ();
this.Close();
Application.ExitThread ();
Application.Exit ();
}

@+
0
Aerdanel
Messages postés
4
Date d'inscription
mercredi 15 novembre 2006
Statut
Membre
Dernière intervention
24 mars 2009

17 nov. 2009 à 09:58
Merci Gluk ! C'est précisément ce que je cherchais, et ça marche du feu de dieu ! \ o /
0
Noib
Messages postés
1
Date d'inscription
vendredi 7 mars 2003
Statut
Membre
Dernière intervention
24 février 2012

24 févr. 2012 à 16:29
J'ai fait un peu différemment (avec un BackGroundWorker) et ça marche aussi;

public MaForm(string[] args)
{
InitializeComponent();

bla bla bla

BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(bw_AttenteFinInit);
bw.RunWorkerAsync();
}

////////////////////////////////////////
private void bw_AttenteFinInit(object sender, DoWorkEventArgs e)
{
while (!this.Created) { Thread.Sleep(500); }
Thread.Sleep(500);
Application.Exit();
}


-----------------
0
cs_gluk
Messages postés
43
Date d'inscription
mercredi 30 avril 2003
Statut
Membre
Dernière intervention
25 avril 2008

12 nov. 2009 à 11:32
Ou mieux encore

// procédure de fermeture de l'application
public void closeAPP(){
if( !this.Created ){
this.Load += delegate { this.closeAPP(); };
return;
}
this.Dispose ();
this.Close();
Application.ExitThread ();
Application.Exit ();
}

@+
-1