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 :

utiliser le thread principal pour créer un usercontrol


Sujet :

Windows Presentation Foundation

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 8
    Points
    8
    Par défaut utiliser le thread principal pour créer un usercontrol
    Bonjour

    Je cherche à créer et insérer un Objet Composant qui contient des élément graphique, dans un Canvas, Mais je me heurte à chaque à l'exception "InvaliOperationException" avec le message suivant :

    "Le thread appelant doit être en mode STA, comme l'exigent de nombreux composants de l'interface utilisateur."

    j'ai testé deux cas,

    la création du composant via l'évennement d'un appuie sur bouton
    et Création suivant un évennement provenant d'une autre partie de mon application qui result d'une analyse.

    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
    private void button1_Click(object sender, RoutedEventArgs e)
    {
          InitComposantIHM();
    }
     
    private void DrawPlan(object sender, SequenceAnalyse.AnalyseEndEventArgs ParArg )
            {
                InitComposantIHM();
     
    private void InitComposantIHM()
    {
          ComposantIHM Composant1= new ComposantIHM ();
          Composant1.SetLocation(PlanComposant.ActualWidth/2, PlanComposant.ActualHeight/2);
          InsertComposant(Composant1);
    }
    ComposantIHM est une classe dont les attribut sont des UC qui décrivent l'aspect de mon composant.

    la création fonctionne dans le premier cas, car lorsque j'effectue l'opération je me trouve dans le thread principal. Par contre dans le deuxième cas (celui dont j'ai besoin) l'operation est effectué à partir d'un thread de travail.

    Est-il possible de revenir dans le thread principal pour que ma partie de code puisse fonctionner ?

    merci d'avance pour vos réponse

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Août 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2010
    Messages : 10
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Il faut que tu utilises un Dispatcher pour que ton thread fasse exécuter ton code par un autre thread (le thread principal pour les éléments graphiques).

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void DrawPlan(object sender, SequenceAnalyse.AnalyseEndEventArgs ParArg )
    {
        Action action = new Action(InitComposantIHM);
        this.Dispatcher.BeginInvoke(action);   // à condition que l'objet ait été instancié par le thread principal
    }

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    merci julienhd, ça marche

    J'avais aperçu ce fameux Dispacther sur MSDN, mais je pensais que c'était plus compliqué que cela à mettre en place. Je ne cernais pas vraiment le fonctionnement.

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

Discussions similaires

  1. utiliser une seule commande pour créer plusieur fichier
    Par waldomania dans le forum Administration système
    Réponses: 1
    Dernier message: 13/12/2009, 16h43
  2. Réponses: 12
    Dernier message: 10/12/2009, 02h48
  3. Réponses: 9
    Dernier message: 11/03/2009, 15h47
  4. Réponses: 12
    Dernier message: 05/03/2007, 10h36
  5. Utiliser Python et PostGresql pour créer un site Web
    Par rvweb dans le forum Réseau/Web
    Réponses: 8
    Dernier message: 22/10/2006, 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