IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Erreur bizarre APRES la fin du programme


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut Erreur bizarre APRES la fin du programme
    Bonjour,

    Depuis ce matin, il m'arrive un truc bizarre. Quand je ferme mon programme développé en C#, je ramasse une erreur au moment où le code sort du Main.

    {"Impossible d'appeler Invoke ou BeginInvoke sur un contrôle tant que le handle de fenêtre n'a pas été créé."}

    à System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous)
    à System.Windows.Forms.Control.BeginInvoke(Delegate method, Object[] args)
    à System.Windows.Forms.WindowsFormsSynchronizationContext.Post(SendOrPostCallback d, Object state)
    à System.Windows.Forms.AxHost.ConnectionPointCookie.Finalize()

    Vu que ça passe après le Application.Run() de ma Form principale, comment pourrais-je faire pour trouver l'origine du problème ?

    Papy !

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Ca ressemble à une ressource qui devrait être proprement fermée avec un Dispose() mais qui ne l'est pas...

    Comment termines-tu ton programme ? Est-ce que tu nettoies les ressources non-managées avant de terminer l'application ?

  3. #3
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Je ferme mon programme de façon tout à fait classique en appelant FormMain.Close(). Et je n'ai aucune ressource non managée. Enfin, pas que je sache. Dès que le code arrive sur l'accolade fermante de ma procédure Main, ça déclenche l'erreur. J'ai le choix de continuer et si je clique sur Oui, l'application de ferme. Si ça ne se produisait qu'en dev, ça serait un moindre mal mais ça se produit même en dehors de C# avec un beau message d'erreur microsoft. J'ai mêm essayé de mettre mon Application.Run() dans un try catch pour essayer de comprendre mais l'erreur se déclenche après

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Février 2004
    Messages
    862
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2004
    Messages : 862
    Par défaut
    Si c'est du Winforms, il y a forcément des ressources non-managées.

    A vu de nez, je dirais que le problème vient d'une Form créée et fermée sans Dispose() qui détecte la fermeture de la Form principale et qui tente de nettoyer, mais trop tard (c'est une supposition, pas une certitude).

    Essais d'ajouter ce code dans ta Form principale pour voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    private void On_FormClosing(object sender, FormClosingEventArgs e)
    {
      this.FormClosing -= new FormClosingEventHandler(On_FormClosing);
      Application.Exit(e);
    }
     
    private void On_FormClosed(object sender, FormClosedEventArgs e)
    {
      this.FormClosed -= new FormClosedEventHandler(On_FormClosed);
    }

  5. #5
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    J'ai eu récemment un cas similaire, à cause d'une fenêtre que l'on pouvait fermer avant qu'un thread ne se termine; donc, bien évidemment le Invoke fait par le thread à la fin de son exécution se plantait.

    Problème résolu en gérant l'event HandleDestroyed, et en positionnant une variable membre que je teste avant d'appeler le Invoke.

    Tu n'aurais pas un thread qui deviendrait brutalement orphelin et qui s'en facherait très fort qui traine quelque part ?

  6. #6
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    this.FormClosing -= new FormClosingEventHandler(On_FormClosing);

    euh, Je pige pas trop ce code. C'est bien un -= qu'il faut faire ?

  7. #7
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Tu n'aurais pas un thread qui deviendrait brutalement orphelin et qui s'en facherait très fort qui traine quelque part ?
    Je n'utilise pas le threading dans ce programme. Juste 1 timer qui affiche l'espace libre sur le disque dur toutes les 5 minutes. J'utilise aussi un backgroungworker mais seulement sur appel d'une fonction particulière. Et l'erreur se déclenche sans rien faire. Je démarre l'appli, je la referme, le code sort du Application.Run() et affiche l'erreur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Runtime.getRuntime().exec exécute le processus après la fin du programme Java
    Par scalande dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 14/02/2012, 17h56
  2. erreur à la fin du programme
    Par adel25 dans le forum SL & STL
    Réponses: 2
    Dernier message: 22/02/2009, 10h50
  3. Erreur de fin de programme
    Par Sygénème dans le forum Scheme
    Réponses: 7
    Dernier message: 21/06/2008, 19h22
  4. Réponses: 6
    Dernier message: 22/11/2007, 22h45
  5. Désactiver les messages d'erreur de Fin de programme
    Par spynux dans le forum Windows XP
    Réponses: 4
    Dernier message: 12/09/2007, 20h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo