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

VB.NET Discussion :

une Erreur à la fermeture du programme


Sujet :

VB.NET

  1. #1
    Membre régulier Avatar de Dr_shaman
    Homme Profil pro
    Ingénieur Concepteur Développeur
    Inscrit en
    Février 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Concepteur Développeur

    Informations forums :
    Inscription : Février 2007
    Messages : 120
    Points : 81
    Points
    81
    Par défaut une Erreur à la fermeture du programme
    Bonjour, j’ai encore un problème, mon appli est presque fini mais je traine un bug depuis le début. Quand je ferme mon application qui a des threads, des backgroundworker, et des timer, et qui affiche un graphique. J’ai une erreur :

    Tentative de libération d'un RCW en cours d'utilisation. Le RCW est utilisé sur le thread actif ou sur un autre thread. Une tentative de libération d'un RCW en cours d'utilisation peut entraîner des dysfonctionnements ou des pertes de données.


    Je ne c’est pas comment stopper RCW avant sa libération merci encore pour votre aide.

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    pour les threads avant de faire start, il est possible de mettre IsBackground à True, dans ce cas, à la fin du thread qui l'a créé (généralement le thread principal), le thread secondaire est arreté

    sinon l'appli ne s'arrete pas forcément (ou alors ca peut faire des bugs si le code est pas sécurisé)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier Avatar de Dr_shaman
    Homme Profil pro
    Ingénieur Concepteur Développeur
    Inscrit en
    Février 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Concepteur Développeur

    Informations forums :
    Inscription : Février 2007
    Messages : 120
    Points : 81
    Points
    81
    Par défaut IsBackground vs WorkerSupportsCancellation
    En faite, ci tu veux, j’ai un programme principal (ma couche logiciel) qui charge des plug-ins (ma couche métier). Dans un des plug-ins j’ai un backgroundworker qui dessine mon graphique. Mais, quand je quitte l’application alors que le plug-in est dans un invok pour redessiner la courbe. C’est la que sa plante. En faite quand je clique sur quitter. La fenêtre ce ferme immédiatement, alors que le thread à pas encor comprit que c’est fini et il tante d’afficher la courbe sur une fenêtre fermé. Et je n’ai pas vu la propriété IsBackground pour mon backgroundworker. Cela di il y a WorkerSupportsCancellation, c’est peut-aitre sa ?

    Je vais tester cette apprêt-manger et je dirai si sa a marcher.

    Merci

  4. #4
    Membre régulier Avatar de Dr_shaman
    Homme Profil pro
    Ingénieur Concepteur Développeur
    Inscrit en
    Février 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Concepteur Développeur

    Informations forums :
    Inscription : Février 2007
    Messages : 120
    Points : 81
    Points
    81
    Par défaut c'est pas WorkerSupportsCancellation
    bin non c'est pas WorkerSupportsCancellation puisque je l'avai déja mis a true.

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    et tu ne peux pas arreter tes backgroundworker quand tu t'arretes ? (ondisposed de form ou autre)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre régulier Avatar de Dr_shaman
    Homme Profil pro
    Ingénieur Concepteur Développeur
    Inscrit en
    Février 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Concepteur Développeur

    Informations forums :
    Inscription : Février 2007
    Messages : 120
    Points : 81
    Points
    81
    Par défaut arreter tes backgroundworker
    En faite dans Class1_Disposed j'ai mis :

    FINDuTreah = false
    Backgroundworker1.CancelAync()
    Backgroundworker1.Dispose()
    MyBase.Finalize()



    FINDuTreah c'est la condition de la boucle qui est dans le Backgroundworker.


    Sa devrai tout Stopper puits tout fermer? Je ne comprend pas.


    Merci

  7. #7
    Membre régulier Avatar de Dr_shaman
    Homme Profil pro
    Ingénieur Concepteur Développeur
    Inscrit en
    Février 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Concepteur Développeur

    Informations forums :
    Inscription : Février 2007
    Messages : 120
    Points : 81
    Points
    81
    Par défaut Class1_Disposed vs Finalize
    En faite j’ai pas encor testé mais je crois que j’ai trouver mon erreur, j’ai fais j’ai implémenté IDisposable qui me donne accès a la fonction Finalize()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Protected Overrides Sub Finalize()
    Fin()
    End Sub

    Avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private sub Fin()
    FINDuTreah = false
    Backgroundworker1.CancelAync()
    Backgroundworker1.Dispose()
    MyBase.Finalize()
    End sub

    Mais j’ai mis fin() aussi dans Class1_Disposed donc je c’est pas ci le problème vient de la mais dans ma logique Class1_Disposed va appeler Finalize() qui va en faite se réappeler …


    Comment je fais dans ce cas la, je supprime quoi ? le fin() qui est dans finalize() ou le fin() qui est dans Class1_Disposed ? finalize() est autonome ?


    Marci pour ton aide

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 156
    Points : 25 075
    Points
    25 075
    Par défaut
    tu mélanges quelques notions


    finalize est une sub qui n'a rien à voir avec IDisposable, elle existe sur object donc sur tout

    elle est appelée par le garbage collector, en général elle appelle dispose(false)

    l'appeler dans le dispose est donc une redondance, voir même à éviter

    (dispose appelle dispose(true))
    dispose tout court existe au premier niveau d'une classe et appelle en général GC.suppressfinalize(me)
    dispose(disposing as boolean) apparait à chaque niveau d'héritage et sert à nettoyer les quelques variables étranges ou gourmandes de la région avant d'appeler mybase)



    après pour ce qui est de l'arret du thread, mettre un booléen qui est testé souvent ou dans une boucle sur l'autre thread est l'idée de base, mais il faut aussi attendre que le thread passe par ce test avant de continuer sur le thread principal, sinon le thread principal peut très bien s'arreter avant, les 2 threads étant par définition exécutés en même temps

    perso j'utilise peu les classes toutes faites, et donc directement la classe thread et les délégués plutot que l'object backgroundworker (que je connais pas en fait)
    et donc sur la classe thread il y a .join qui dit d'attendre la fin du thread, il faudrait que tu trouves un truc similaire
    (attention .join est aussi une instruction potentiellement à risque niveau deadlock, m'enfin y a .interrupt qu'existe aussi )
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre régulier Avatar de Dr_shaman
    Homme Profil pro
    Ingénieur Concepteur Développeur
    Inscrit en
    Février 2007
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Concepteur Développeur

    Informations forums :
    Inscription : Février 2007
    Messages : 120
    Points : 81
    Points
    81
    Par défaut C'est OK un sur Deux
    En faite j'ai deux plugin et un seul ne marche pas (c'est une copie du premier) il y a une tempo fantôme. Par ce que normalement j'ai une tempo de 1s mais il s’exécute toute les 2s et même ci j'enlève toutes les tempos dans le plug in fait un affichage toutes les 1s. bref c’est une erreur bidon encor.


    Merci pour ton aide.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/11/2010, 17h08
  2. Erreurs à la fermeture du programme
    Par sylvain.cool dans le forum C++
    Réponses: 17
    Dernier message: 10/06/2008, 15h01
  3. Réponses: 8
    Dernier message: 04/03/2008, 23h30
  4. détecter une erreur et arreter le programme en cour
    Par timbrochier dans le forum Langage
    Réponses: 6
    Dernier message: 23/11/2006, 11h03
  5. Message d'erreur à la fermeture d'une page web
    Par WELCOMSMAIL dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 26/04/2006, 17h12

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