Je cherche à développer une application succeptible d'ouvrir, à partir d'un
MainForm (non MDI), une ou plusieurs autres fenêtres.
Mon souci, c'est à la fermeture d'une de ces fenetres. A l'exécution de la
méthode Close, l'application plante.
Après quelques recherches, j'ai réalisé que le problème vennait que je ne
travaillais pas avec le bon thread. J'ai centré mon attention sur le
InvokeRequired.
J'ai alors procédé de la manière suivante (voir code ci-dessous) mais je
reste perplexe (bien que cela fonctionne), car la mémoire ne semble pas se
libérer correctement (en regardant dans le gestionnaire des tâches).
Auriez-vous la gentillesse de m'aider, et/ou me communiquer une manière
éventuellement plus propre de gérer ce genre de problème ?
D'avance, merci
Clément
Code :
delegate void CurrentFormDelegate(object sender, int r);
delegate void CloseCallBack();
private void CloseCurrentForm(object sender, int r)
{
if (this.InvokeRequired)
this.Invoke(new CurrentFormDelegate(CloseCurrentForm), new
object[] { sender, r });
else
{
CloseCallBack closeDelegate = new CloseCallBack(this.Close);
closeDelegate.BeginInvoke(new AsyncCallback(CallBackEnd),
closeDelegate);
}
}
void CallBackEnd(IAsyncResult ar)
{
if (InvokeRequired)
{
Invoke(new AsyncCallback(CallBackEnd), new object[] { ar });
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Delf
Le 02/10/2009, Clément a supposé :
Je cherche à développer une application succeptible d'ouvrir, à partir d'un MainForm (non MDI), une ou plusieurs autres fenêtres. Mon souci, c'est à la fermeture d'une de ces fenetres. A l'exécution de la méthode Close, l'application plante.
Après quelques recherches, j'ai réalisé que le problème vennait que je ne travaillais pas avec le bon thread. J'ai centré mon attention sur le InvokeRequired.
Bonsoir.
Si je comprends bien, la MainForm ouvre une FormX via quelque chose du genre :
FormX myForm = new FormX(); myForm.Show();
Pourquoi ne pas définir une méthode public dans FormX :
public void Close() { this.Close(); }
Et ainsi faire dans le MainForm :
myForm.Close(); myForm.Dispose();
Je ne sais pas si ça marche.
-- D.
Le 02/10/2009, Clément a supposé :
Je cherche à développer une application succeptible d'ouvrir, à partir d'un
MainForm (non MDI), une ou plusieurs autres fenêtres.
Mon souci, c'est à la fermeture d'une de ces fenetres. A l'exécution de la
méthode Close, l'application plante.
Après quelques recherches, j'ai réalisé que le problème vennait que je ne
travaillais pas avec le bon thread. J'ai centré mon attention sur le
InvokeRequired.
Bonsoir.
Si je comprends bien, la MainForm ouvre une FormX via quelque chose du
genre :
FormX myForm = new FormX();
myForm.Show();
Pourquoi ne pas définir une méthode public dans FormX :
Je cherche à développer une application succeptible d'ouvrir, à partir d'un MainForm (non MDI), une ou plusieurs autres fenêtres. Mon souci, c'est à la fermeture d'une de ces fenetres. A l'exécution de la méthode Close, l'application plante.
Après quelques recherches, j'ai réalisé que le problème vennait que je ne travaillais pas avec le bon thread. J'ai centré mon attention sur le InvokeRequired.
Bonsoir.
Si je comprends bien, la MainForm ouvre une FormX via quelque chose du genre :
FormX myForm = new FormX(); myForm.Show();
Pourquoi ne pas définir une méthode public dans FormX :
public void Close() { this.Close(); }
Et ainsi faire dans le MainForm :
myForm.Close(); myForm.Dispose();
Je ne sais pas si ça marche.
-- D.
Richard Clark
N'aurais tu pas créé l'une des fenêtre dans un autre Thread ?
Richard Clark http://www.c2i.fr Le 1er site .NET
Delf a écrit :
Le 02/10/2009, Clément a supposé :
Je cherche à développer une application succeptible d'ouvrir, à partir d'un MainForm (non MDI), une ou plusieurs autres fenêtres. Mon souci, c'est à la fermeture d'une de ces fenetres. A l'exécution de la méthode Close, l'application plante.
Après quelques recherches, j'ai réalisé que le problème vennait que je ne travaillais pas avec le bon thread. J'ai centré mon attention sur le InvokeRequired.
Bonsoir.
Si je comprends bien, la MainForm ouvre une FormX via quelque chose du genre :
FormX myForm = new FormX(); myForm.Show();
Pourquoi ne pas définir une méthode public dans FormX :
public void Close() { this.Close(); }
Et ainsi faire dans le MainForm :
myForm.Close(); myForm.Dispose();
Je ne sais pas si ça marche.
-- D.
N'aurais tu pas créé l'une des fenêtre dans un autre Thread ?
Richard Clark
http://www.c2i.fr
Le 1er site .NET
Delf a écrit :
Le 02/10/2009, Clément a supposé :
Je cherche à développer une application succeptible d'ouvrir, à partir
d'un MainForm (non MDI), une ou plusieurs autres fenêtres.
Mon souci, c'est à la fermeture d'une de ces fenetres. A l'exécution
de la méthode Close, l'application plante.
Après quelques recherches, j'ai réalisé que le problème vennait que je
ne travaillais pas avec le bon thread. J'ai centré mon attention sur
le InvokeRequired.
Bonsoir.
Si je comprends bien, la MainForm ouvre une FormX via quelque chose du
genre :
FormX myForm = new FormX();
myForm.Show();
Pourquoi ne pas définir une méthode public dans FormX :
N'aurais tu pas créé l'une des fenêtre dans un autre Thread ?
Richard Clark http://www.c2i.fr Le 1er site .NET
Delf a écrit :
Le 02/10/2009, Clément a supposé :
Je cherche à développer une application succeptible d'ouvrir, à partir d'un MainForm (non MDI), une ou plusieurs autres fenêtres. Mon souci, c'est à la fermeture d'une de ces fenetres. A l'exécution de la méthode Close, l'application plante.
Après quelques recherches, j'ai réalisé que le problème vennait que je ne travaillais pas avec le bon thread. J'ai centré mon attention sur le InvokeRequired.
Bonsoir.
Si je comprends bien, la MainForm ouvre une FormX via quelque chose du genre :
FormX myForm = new FormX(); myForm.Show();
Pourquoi ne pas définir une méthode public dans FormX :
public void Close() { this.Close(); }
Et ainsi faire dans le MainForm :
myForm.Close(); myForm.Dispose();
Je ne sais pas si ça marche.
-- D.
Patrice
Je prendrais plutôt le problème dans l'autre sens. Si ce n'est pas un comportement que tu recherches explicitement pourquoi une fenêtre s'ouvre t'elle dans un autre thread ? Et je modifierai donc mon code pour que toutes les fenêtres s'ouvrent dans la même thread. Cela sera je pense bien simple.
Et c'est pas bien de parler d'une erreur sans donner son texte exact ;-) Il est éventuellement possible qu'une erreur dans son interprétation te lance sur une fausse piste...
-- Patrice
Je prendrais plutôt le problème dans l'autre sens. Si ce n'est pas un
comportement que tu recherches explicitement pourquoi une fenêtre s'ouvre
t'elle dans un autre thread ? Et je modifierai donc mon code pour que toutes
les fenêtres s'ouvrent dans la même thread. Cela sera je pense bien simple.
Et c'est pas bien de parler d'une erreur sans donner son texte exact ;-) Il
est éventuellement possible qu'une erreur dans son interprétation te lance
sur une fausse piste...
Je prendrais plutôt le problème dans l'autre sens. Si ce n'est pas un comportement que tu recherches explicitement pourquoi une fenêtre s'ouvre t'elle dans un autre thread ? Et je modifierai donc mon code pour que toutes les fenêtres s'ouvrent dans la même thread. Cela sera je pense bien simple.
Et c'est pas bien de parler d'une erreur sans donner son texte exact ;-) Il est éventuellement possible qu'une erreur dans son interprétation te lance sur une fausse piste...