Programme fermé mais processus toujours actif

Résolu
Aphex Twin Messages postés 27 Date d'inscription jeudi 29 janvier 2004 Statut Membre Dernière intervention 8 mai 2009 - 29 août 2006 à 17:57
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 30 août 2006 à 00:23
Bonjour, j'ai un petit soucis avec un programme. Le programme en lui même fonctionne comme il faut mais je remarque malgré tout quelque chose d'anormal. Lorsque je ferme le programme, il se ferme correctement, il dissparait aussi bien de l'écran que dans la barre des tâches... mais en ouvrant mon Gestionnaire des tâches, je remarque que le programme est toujours présent. (le nom du programme, avec son icone, et "En cours d'exécussion" dans la colonne à coté) A quoi est-ce dû? Et comment puis-je résoudre cette anomalie?

16 réponses

PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
29 août 2006 à 19:02
c'est même certain

faire "If About.Visible = False Then"
concrètement çà charge la form About.
elle passe par le load
ne passe pas par paint (puisque pas de show)

tu as donc une réponse false mais ta form est chargée
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
3
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
29 août 2006 à 18:00
Salut,


Peu etre que tout tes objet ne sont PAS Correctment dechargés.






@+,   Ju£i?n
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
29 août 2006 à 18:04
salut,
tu as pu fermer avec des Me.hide

il peux y avoir d'autres form (ou objets comme le dit JRivet) en cours d'utilisation
tu peux avoir un timer à petit intervalle en cours de fonctionnement
ou boucle....

etc.....
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
Aphex Twin Messages postés 27 Date d'inscription jeudi 29 janvier 2004 Statut Membre Dernière intervention 8 mai 2009
29 août 2006 à 18:07
Quels objets seraient suceptible de ne pas être déchargé? Mon programme est composé de plusieurs feuilles mais l'instruction "Unload Me" est toujours appelé lors de la fermeture de n'importe laquelle d'entres elles. J'ai également une base de donnée Access qui est ouverte à une certaine partie de mon programme mais lors de la fermeture de la feuille, je fais pourtant un "Titres.Close" (la table), un "BD.Close", (la base de donnée)", puis un "Unload Me".
0

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

Posez votre question
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
29 août 2006 à 18:19
DB (entre autres) est un objet, donc à détruire ensuite
(set DB = nothing)

mais il y a forcément autre chose...

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
29 août 2006 à 18:20
BD*
0
Aphex Twin Messages postés 27 Date d'inscription jeudi 29 janvier 2004 Statut Membre Dernière intervention 8 mai 2009
29 août 2006 à 18:29
Il y'a aussi un timer dans mon programme mais il se trouve sur une autre feuille et parametré par défaut en "Enabled = False". Le probleme survient même sans appeler cette feuille dans laquelle se trouve le timer. (par sécurité je viens d'ajouter un "Timer.Enabled = False" dans le "Unload" de la feuille dans laquelle il se trouve, pour m'assurer qu'il ne continue pas.)

Par contre, j'appel peut-etre mes autres fenêtes de la mauvaise maniere. Mon programme est composé de 4 feuilles (FormMain, Invitation, Localisation, About) et elles sont appelées de la maniere suivante:

1) Load Invitation
    Invitation.Show vbModal

2) Localisation.Show
        If Localisation.WindowState = vbMinimized Then
            Localisation.WindowState = vbNormal
        End If
    Localisation.SetFocus

3) About.Show vbModal

Et elles sont toutes refermée par un Unload Me. Est-ce suffisant?
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
29 août 2006 à 18:36
faut voir le code dans leur form_load et leur form_unload mais leur appel semble correct

<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
Aphex Twin Messages postés 27 Date d'inscription jeudi 29 janvier 2004 Statut Membre Dernière intervention 8 mai 2009
29 août 2006 à 18:54
Est-ce que cela peut être du à des variables que je définis sur base d'objets ou variables publiques se trouvant sur d'autres feuilles?

Du genre, dans ma feuille FormMain, si je met "If About.Visible = False Then" (et ce meme sans jamais appeler la feuille "About" pendant l'exécution du programme) est-ce que ca pourrait provoquer le probleme?
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
29 août 2006 à 19:06
teste en dessous avec ce code :

    Dim Frm As Form 
    Dim bFound As Boolean 
    bFound =  False 
    For Each Frm In Forms 
        If Frm.Name = "About" Then bFound = True: Exit For 
    Next Frm 

    If bFound Then 
        MsgBox "chargée" 
    Else 
        MsgBox "pas chargée" 
    End If

<small> Coloration
syntaxique automatique [AFCK] </small>
       

++
PCPT   [AFCK]

<hr size ="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
Aphex Twin Messages postés 27 Date d'inscription jeudi 29 janvier 2004 Statut Membre Dernière intervention 8 mai 2009
29 août 2006 à 19:09
Aaah, d'accord.. je viens de tester en enlevant cette vérification du "If About.visible = false then" et en effet le processus n'est plus en cours d'exécution quand je quitte le programme.
C'est donc ca... Merci beaucoup!

Malheureusement, il me faut maintenant trouver une solution alternative pour remplacer mon test (If .visible = false) et je ne sais pas comment faire.. En fait, appeler un SetFocus sur une textbox lorsqu'un évenement survient dans la FormMain.. mais il arrive que l'évenement survienne pendant que je suis dans une autre feuille modale, comme "About".. et j'aimerai qu'il ne fasse pas de SetFocus tant que je suis dans une autre fenêtre modale de mon programme.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 26
29 août 2006 à 19:11
 Bonsoir,

pour la base Access, il y a surement plusieurs "set" (Db et Rs), donc,
en fin, il faut autant de suppression.
D'une manière générale, tous les set créés doivent être supprimés.
Set Db  = Nothing
Set Rs  = Nothing
jean-marc
0
Aphex Twin Messages postés 27 Date d'inscription jeudi 29 janvier 2004 Statut Membre Dernière intervention 8 mai 2009
29 août 2006 à 19:16
Oui, pour les bases de donnée, je me contente d'un Titres.Close et BD.Close. Je ne sais pas si c'est suffisant.
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
29 août 2006 à 19:26
salut JMO,
en effet, je n'ai pas mis le RS (puisque nommé Titles), "en autres" puisque je supposais que les objets étaient multiples (plus de 2)

Aphex,
juste les fermer est suffisant sur le principe pour un utilitaire, mais autant prendre l'habitude de décharger tous tes objets.
et une solution alternative au .visible?
et hop, un snippetde plus

++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
Aphex Twin Messages postés 27 Date d'inscription jeudi 29 janvier 2004 Statut Membre Dernière intervention 8 mai 2009
29 août 2006 à 19:35
Merci PCPT :) je vais essayer avec ca.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
30 août 2006 à 00:23
Salut,


En principe, pour quitter un programme de façon "sécuritaire" il faut
fermer chaque objet du programme et de les mettre à Nothing. Par objet,
je pense à toutes sortes de choses qui utilisent SET


De plus, tu dois fermer le ou les Timers et fermer toutes les Forms.

Si tu appliques cela à tous tes programmes, tu ne devrais plus avoir de problèmes.


Donc, dans le Form_Unload de la Form principale, si tu utilises des Recordsets, BD...

    If (Rs Is Nothing) False Then Set Rs Nothing (après un .Close si c'est pas déjà fait)

    If Db.Connect <> "" Then Db.Close

    Workspaces(0).Close  'pas certain de celle-là...

    Set Db = Nothing

    ....


Pour les Forms

    Dim frm as Form

    For Each frm In Forms

        Unload frm

        Set frm = Nothing

    Next

MPi
0