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

Windows Presentation Foundation Discussion :

[C#][WPF] Communication entre Threads


Sujet :

Windows Presentation Foundation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Par défaut [C#][WPF] Communication entre Threads
    Bonjour,

    J'ai un petit soucis avec mes threads.

    Pour faire simple, mon thread principal instancie un objet puis exécute une méthode de cet objet. Cette méthode lance un thread.

    Dans ce thread je souhaite modifier un booléen de mon objet (tout en laissant tourner le thread) cependant il me dis que je ne peut pas modifier cette variable car elle est détenue par un autre thread.

    Merci de m'éclairer

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 199
    Par défaut
    un controle ne peut être modifié que depuis le thread qui l'a créé
    pour les autres variables pas de soucis

    il faut donc depuis le thread revenir temporairement sur le thread principal pour modifier le controle puis continuer le thread

    voir délégué, this.invokerequired, this.invoke
    ou backgroundworker
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    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
    Citation Envoyé par Pol63 Voir le message
    un controle ne peut être modifié que depuis le thread qui l'a créé
    Il n'a pas précisé qu'il instanciait un contrôle.

  4. #4
    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
    Bonjour,

    Citation Envoyé par Floco Voir le message
    il me dis que je ne peut pas modifier cette variable car elle est détenue par un autre thread.
    Je doute très fort de ce message (un thread n'est jamais propriétaire d'une instance, le seul cas particulier étant les controles qui ne peuvent être modifiés que par leur thread de création, comme le mentionne Pol63 - vieille contrainte héritée de Win32).

    Quelle exception reçois tu exactement ?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 199
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Il n'a pas précisé qu'il instanciait un contrôle.
    moi non plus ...
    un controle existant est forcément instancié à un moment ou à un autre ...


    Citation Envoyé par Bluedeep Voir le message
    vieille contrainte héritée de Win32
    une idée de pourquoi il y a la même contrainte en wpf qui n'utilise pas win32 ?


    Citation Envoyé par Bluedeep Voir le message
    Quelle exception reçois tu exactement ?
    je vote pour Illegal Cross Thread ^^
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Par défaut
    Voici exactement l'erreur que j'ai :

    InvalidOperationException : Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread en est propriétaire.
    @Pol63 : Qu'appels-tu un "contrôle" ? Car ma classe est "basique" elle n'hérite de rien, ce n'est pas un contrôle utilisateur.

    Merci pour vos réponses.

  7. #7
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Dans ce cas je te propose de nous montrer ton bout de code

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 199
    Par défaut
    ce que j'appelle un controle, c'est une classe héritant de control (button, form, usercontrol etc...)

    mais le message d'erreur que tu as n'est pas celui qu'on a dans le cas d'un inter thread de control en windows forms

    es-tu sur wpf ?
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    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
    Citation Envoyé par Floco Voir le message
    Voici exactement l'erreur que j'ai :

    "InvalidOperationException : Le thread appelant ne peut pas accéder à cet objet parce qu'un autre thread en est propriétaire."

    @Pol63 : Qu'appels-tu un "contrôle" ? Car ma classe est "basique" elle n'hérite de rien, ce n'est pas un contrôle utilisateur.

    Merci pour vos réponses.
    Poste le code.

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 61
    Par défaut
    Oui, excusez moi, j'ai oublié de spécifier que je travaillais sur WPF.

    Pour ce qui est du code, ma classe est assez compliqué en fait, voilà l'équivalent en plus simple :


    Ma classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    class MaClasse
    {
            public bool NewMessage;
            private Thread _listenThread;
     
            public MaClasse()
            {
                      _listenThread = new Thread(new ThreadStart(ListenServer));
                      _listenThread.Start();
            }
     
            private void ListenServer()
            {
                while (run)
                {
                        // Mes Traitement
                        NewMessage = true; // C'est ici que ça bug
                }
            }
    }

    Mon programme principale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaClasse maclasse = new MaClasse();

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

Discussions similaires

  1. [C#] Communication entre thread
    Par kekesilo dans le forum Windows Forms
    Réponses: 11
    Dernier message: 17/09/2007, 19h48
  2. [thread] communication entre threads
    Par untipy dans le forum Concurrence et multi-thread
    Réponses: 11
    Dernier message: 30/08/2007, 15h47
  3. Problème de communications entre threads
    Par maya09 dans le forum Windows
    Réponses: 1
    Dernier message: 22/02/2006, 22h18
  4. Communication entre thread
    Par JFPS Soft dans le forum Concurrence et multi-thread
    Réponses: 2
    Dernier message: 03/02/2006, 17h38
  5. [c#][threading] communication entre threads
    Par orelero dans le forum C#
    Réponses: 6
    Dernier message: 02/01/2006, 00h42

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