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

Silverlight Discussion :

Thread et datacontext


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Par défaut Thread et datacontext
    Bonjour a tous, J'ai une question ...

    J'ai un contexte de donne que je charge par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    GestionDomainContext contexte = new GestionDomainContext();
    contexte.Load(contexte.GetParaGestionQuery());
    Est-il possible de faire un thread, de maniere a ce que mon code attende que l'entite soit chargee ?

    Je sais que je peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    contexte.Load(contexte.GetParaGestionQuery()).Completed += (o, e) => ma_methode();
    mais cela ne m'est pas utile car j'ai plusieurs entité a chargée, et je voudrais que lorsque toute mes entités dont j'ai besoin soit charge, le code suis son cours ..


    Quelqu'un aurait-il une idée ?

  2. #2
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Tu pourrais essayer un truc du genre (non testé):

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    public class Flagger
    {
        public Dictionary<string,bool> flags;
     
       public event System.EventHandler FlaggerCompleted;
     
       // Ajoute un flag
     
       public void Add( string flagName )
       {
           this.flags.Add( flagName, false );
       }
     
       public void Clears()
       {
           this.flags.Clear();
       }
     
       public void Set( string flagName )
       {
             this.flags[ flagName ] = true;
     
             lock( this.flags )
             {          
             foreach( bool value in this.flags.Values )
             {
                  if( value == false )
                  {
                       return;
                  }
             }
             }
     
             // tout le monde a terminé
     
             if( FlaggerCompleted != null )
             {
                 this.FlaggerCompleted( this, null ); 
             }
       }
    }
    Pour l'appel :

    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
     
     
      Flagger flagger = null;
     
      public void Load()
     {
          this.flagger = new Flagger();
          // execution de la fin
          this.flagger.Completed += (s,e) => ma_methode_de_fin();
     
          flagger.Add("Table1");
          flagger.Add("Table2");
     
          // chargement de la table 1
          contexte.Load(contexte.GetParaGestion1Query()).Completed += (o, e) => flags.Set("Table1");
          // chargement de la table 2
          contexte.Load(contexte.GetParaGestion2Query()).Completed += (o, e) => flags.Set("Table2");
     }
    Les méthodes abonnés aux completeds devraient être affectées à des delegates pour éviter les memoryleaks

  3. #3
    Membre émérite Avatar de jmix90
    Homme Profil pro
    Consultant .Net
    Inscrit en
    Juillet 2007
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 576
    Par défaut
    Hello,

    Le reactive framework te permet de faire cela assez simplement...

    Voici l'exemple qui te concerne où 3 Threads de calculs sont lancés parallèlement (tes appels Load) et un méthode est appelée à la fin du traitement des 3 threads : http://rxwiki.wikidot.com/101samples#toc3


    Le site des Reactive extension est le suivant : http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx

    Bon courage...

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    La proposition de Samoteph me semble également très bien.

    Simplement il faudrait peut-être changer le lock ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    lock( this.flags )
    {       
        this.flags[ flagName ] = true;
     
        foreach( bool value in this.flags.Values )
        {
            if( value == false )
            {
                return;
            }
        }
    }

  5. #5
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    oui effectivement

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Par défaut
    Bonjour a tous !
    Excusez moi pour ce retard de réponse...
    Alors j'ai teste la solution propose par Samoteph mais cela ne marche pas.
    J'ai du faire quelques modifs, les voici :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    public class Flagger
        {
            public Dictionary<string, bool> flags;
            public event System.EventHandler FlaggerCompleted;
     
            // Ajoute un flag
     
            public void Add(string flagName)
            {
                this.flags.Add(flagName, false);
            }
     
            public void Clears()
            {
                this.flags.Clear();
            }
     
            public void Set(string flagName)
            {
                this.flags[flagName] = true;
     
                lock (this.flags)
                {
                    this.flags[flagName] = true;
     
                    foreach (bool value in this.flags.Values)
                    {
                        if (value == false)
                        {
                            return;
                        }
                    }
                }
     
                // tout le monde a terminé
     
                if (FlaggerCompleted != null)
                {
                    this.FlaggerCompleted(this, null);
                }
            }
     
        }
    Cote appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Flagger flagger = null;
     
                flagger = new Flagger();
                // execution de la fin
                flagger.FlaggerCompleted += (s, e) => ActionForContextAppliGerstionCompleted();
     
                flagger.Add("Table1");
                flagger.Add("Table2");
     
                // chargement de la table 1
                contexte.Load(contexte.GetParaGestionQuery()).Completed += (o, e) => flagger.Set("Table1");
                // chargement de la table 2
                contexte.Load(contexte.GetParaGestionQuery()).Completed += (o, e) => flagger.Set("Table2");

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

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. récupérer la valeur de sortie d'un thread
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2002, 11h28
  3. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53

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