Ce sujet est résolu.
1 | |||||
Auteur | Messages | ||||
---|---|---|---|---|---|
valaquarus | #1 Posté le 18/5/2021 à 07:36:20 | ||||
-- Unus Ex Altera --![]() | Bonjour à tous, comment fermer correctement une application qui utilise le trayicon? Voici ce que j'obtiens systématiquement en fermant par le menu du trayicon :
Avant que de fermer je fais ceci :
Philippe. Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3 | ||||
linuxos | #2 Posté le 19/5/2021 à 03:40:12 | ||||
Un peu de sel, de poivre et la crevette sera... ![]() | Valaquarus, De mon coté je mets ceci dans la Procedure Form_Close()
Ca fonctionne tres bien de mon coté. Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. | ||||
valaquarus | #3 Posté le 19/5/2021 à 07:26:02 | ||||
-- Unus Ex Altera --![]() | Bonjour Linuxos, J'ai essayé ton truc mais j'obtiens la même chose, ce qui me parait normal car :
Quand c'est le formulaire principal qui appelle le form_close cela fonctionne bien par contre, quand c'est le menu du trayIcon cela génère les erreurs citées plus haut. Des références circulaires, pour moi c'est un objet qui s'appelle lui-même ce qui est bien le cas puisqu'un menuItem du menu lié au trayIcon appelle trayIcon.delete() mais je ne sais pas comment en sortir. Philippe Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3 | ||||
linuxos | #4 Posté le 19/5/2021 à 12:52:38 | ||||
Un peu de sel, de poivre et la crevette sera... ![]() | Bonjour Valaquarus, Je pense comprendre ton soucis. J'avais pas noté que c'est quand tu clic sur le TrayIcon pour quitter que tu as l'erreur. Il me semble que quand tu clic sur le TrayIcon alors tu montes un Événement 'TrayIcon1_Click()' qui doit etre executé, mais pendant que tu l’exécutes tu demandes a quitter l'application, ce qui fait que l’objet 'TrayIcon1', même avec l'instruction 'TrayIcon1.Delete()', n'a pas le temps d'être détruit, d’où la référence circulaire. Peut être ajouté un délais dans le 'Form_Close()' pour laisser le temps a Gambas de détruire réellement le 'TrayIcon':
Essaye tout d’abord sans la boucle WHILE puis si ça fonctionne toujours pas, décommente la pour tester. Ca devrait faire ton affaire je pense. Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. | ||||
valaquarus | #5 Posté le 19/5/2021 à 19:43:20 | ||||
-- Unus Ex Altera --![]() | ReBonjour Linuxos, d'abord merci de te pencher sur mon petit souci. j'étais en train d'essayer tes propositions. Voici d'abord ce que j'ai essayé :
dans cette configuration avec les lignes commentées tel que tu les vois l'arrêt se fait bien par le form_close(croix rouge du formulaire) mais pas par le menu mnuTrayQuit_click où là rien ne se passe. Par contre si je décommente ces lignes et commente les suivantes alors le progr s'arrête par le mnuTrayQuit_Click avec les erreurs citées plus haut. La proposition de laisser plus de temps par la boucle while ne fonctionne pas plus. J'ai essayé de passer un Stop Event et même un Object.detach(Tray) mais c'est idem. Au lieu de Form_close() j'ai tenté me.close() et là la liste des objets non fermés augmente. Peut être que le problème vient simplement de l'IDE qui ne veut pas fermer correctement alors que le progr autonome ferme correctement.
Je vais compiler comme ça et voir ce qui reste en mémoire effectivement. Philippe Ps : si je rajoute un wait après Tray.Visible=False alors les deux propositions (commentées) sont équivalentes. Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3 | ||||
linuxos | #6 Posté le 20/5/2021 à 02:29:57 | ||||
Un peu de sel, de poivre et la crevette sera... ![]() | Bonsoir Valaquarus, Dans ce cas, il me semble que tu devrais ouvrir un bug sur le BugTracker du site de Gambas, cela y ressemble a mon avis. Reprends les derniers tests que tu m'as cité pour décrire le BUG, je pense que c'est une bonne base. Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. | ||||
valaquarus | #7 Posté le 20/5/2021 à 12:19:01 | ||||
-- Unus Ex Altera --![]() | Bonjour Linuxos, je ne pense pas que ce soit un bug (sauf de ma part) mais plutôt mon formulaire principal qui doit être "trop complexe" (ce qui veut tout dire) pour une fermeture propre ; j'ai en effet créé un projet vide uniquement avec les éléments de la fermeture (avec un formulaire vide) et là, miracle cela fonctionne très bien et proprement. Je suis donc sur la piste du ou des coupables qui ne se ferment pas correctement et qui empêche le formulaire principal de se clore proprement. Philippe. Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3 | ||||
linuxos | #8 Posté le 20/5/2021 à 13:19:48 | ||||
Un peu de sel, de poivre et la crevette sera... ![]() | Bonjour Valaquarus, Dans ce cas il faut traquer tous les objets, tableaux, etc... et les mettres a NULL avant de quitter pour que rien ne reste en mémoire. Je sais c'est pas normal mais c'est la seule façon que j'ai trouvé pour faire le ménage dans mes projets. Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. | ||||
valaquarus | #9 Posté le 21/5/2021 à 05:58:40 | ||||
-- Unus Ex Altera --![]() | Bonjour Linuxos, quand même étrange ce problème de clôture propre, récurrent sur beaucoup de projet. pourquoi devoir faire la chasse à ce qui reste ouvert, et qui empêche la libération de la mémoire. Un de mes projets met exactement (montre en main ou avec le débogueur) trois minutes pour libérer la mémoire alors qu'un autre ne la libère pas tant que je n'interviens pas et impossible (pour mes yeux) de faire une différence qui expliquerait cela. Philippe PS : autre chose de particulier, quand je ferme par la croix rouge du formulaire cela se ferme correctement plus ou moins rapidement par contre par un menu quelconque en écrivant :
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3 | ||||
spheris | #10 Posté le 22/5/2021 à 10:07:50 | ||||
![]() | Peut être un brutal
ça a au moins l'avantage de fermer sauvagement tout le programme. ![]() | ||||
valaquarus | #11 Posté le 22/5/2021 à 15:02:02 | ||||
-- Unus Ex Altera --![]() | Bonjour à tous, tout à fait Sphéris mais j'essaye d'être moins brutal (ceci dit ça fonctionne) mais je pense avoir trouvé d'où venait la référence circulaire. Quand on ferme par me.close (normalement, quoi) il ne faut plus faire référence (ou appel) à quelque chose que l'on a déclaré dans le formulaire que l'on tente de fermer sinon on obtient des références circulaires. Ici, j'avais un son déclaré dans le formulaire principal que j'appelais dans le splashForm après la fermeture du principal d'où l'erreur. J'ai simplement déplacé l'appel du son au moment de la clôture du formulaire principal et magie de la chose. Philippe PS : pour certains projets, trouver d'où viennent ces références circulaires s'avère vraiment coton et heureusement que le
Système d'exploitation : KDE neon 6.0 ~ Version Gambas : 3.19.3 | ||||
1 |