Hello,
Voila j'ai créé un user contrôle (ProgressViewer) tout bête composé d'une progressbar et d'un label. Il n'y a même pas de code dedans.
Ensuite dans ma form j'utilise un FlowlayoutPanel pour ajout/suprimer des intances de ce contrôle. Visuelement on a qq chose qui ressemble à l'interface de emule.
Voici comment j'ajoute les ProgressViewer :
Le FlowLayoutPanel s'appelle "tlpThread"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Try Dim PgRep As New ProgressViewer PgRep.Name = "Rep" & TaskId PgRep.lblTaskName.Text = TaskId PgRep.Tag = TaskId PgRep.Width = 737 Me.tlpThread.Controls.Add(PgRep) Catch ex As Exception LogException(ex) End Try
Et voici comment je les enléve :
Bref Rien de méchant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.tlpThread.Controls.RemoveByKey(("Rep" & TaskId))
Pour tester tout ça je laisse tourner l'appli toute la nuit.
Et bout de 6h moulinage (ce qui represente environs 3000 ajout/suppression de controle dans le FlowLayoutPanel)... Paf !!!
Le Me.tlpThread.Controls.Add(PgRep) plante avec l'exception :
EXCEPTION TYPE : System.ComponentModel.Win32Exception
EXCEPTION MESSAGE : Erreur lors de la création d'un handle de fenêtre.
Celle erreur est loggée dans la gestion d'erreur et ensuite j'en prends une autre du même type mais celle ci non géré puisqu'elle arrive dans un obscur fichier :
"TestAppli.My.MyApplication.Main(String[] Args) dans 17d14f5c-a337-4978-8281-53493378c1071.vb:ligne 81" que je n'ai pas dans mon projet
(j'ai trouvé ça dans la StackTrace)
Voilà j'aimerais comprendre pourquoi tout d'un coup le conteneur à craquer nerveusement.
Est ce que j'utilise une mauvaise méthode pour les supprimer ?
Est ce que au bout de 3000 ajout/suppression c'est "normale" qu'il patauge ?
Je pense bien à une fuite de mémoire (car la mémoire utilisée avait aussi tendance à augmenter petit à petit avec le tps)... mais où ?
Si vous avez des idées je suis preneur.
Merci de votre aide
Partager