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 :

Probleme utilisation du Dispatcher.Invoke


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 27
    Par défaut Probleme utilisation du Dispatcher.Invoke
    Bonjour,

    Je doit représenter une courbe en temps quasi réel.
    Pour ce faire j'utilise:
    - un thread qui empile une File de pts
    - un thread qui dépile les pts
    - et donc le "thread graphique" sur lequel je n'ai pas vraiment la main de ce que je comprend et auquel on accède par le Dispatcher de la fenêtre et en effectuant un Invoke

    Or en logant avant et après l'appel au Dispatcher.Invoke j'ai des temps aléatoires allant de 3 à 110ms
    Et de même en logant avant et après l'appel à la fonction de dessin même, des temps de 3 à 55ms ?!
    Je ne comprend pas d'où peuvent venir ces temps aberrant, pourquoi de telles différences, et surtout comment puis je régulariser ça ?
    (Comme dit precedement j'ai une pile de point, du coup avec ces delais la pile explose :S)

    Boucle du thread de depile:
    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
    while (exRunningFlag)
                {
                        lock (myLock)
                        {                        
                            while ( stackingListPoint.Count > 0)
                            {
                               LOG
                               this.Dispatcher.Invoke(new Action(() =>
                                        {
                                            LOG                                      
                                                graph.AddPoint(this.stackingListPoint.Dequeue());                                        
                                            LOG
                                        }), System.Windows.Threading.DispatcherPriority.Send);
                                        LOG                                
                                }
                            }
                        }                    
                    Thread.Sleep(3);
                }
    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
     
    public void AddPoint(System.Windows.Point pt)//Data
            {            
                int resNeedResize = needResize(pt);
    // ------ Cas particulier ou on doit redessiner toutes les courbes. Ce n'est pas lié aux temps abérants que je voie apparaitre
                if (resNeedResize != 0)
                {
                    ReDraw(resNeedResize);
                    return;
                }
    // ----
                currentPt = ConversionDataPtToGraphPt(pt);
                if ((lastPt.X != -1) && (lastPt.Y != -1))
                {     
                        g = CreateGraphics();                   
                        g.DrawLine(pen_Courbe, lastPt, currentPt);
                        g.Flush(); 
                }
                lastPt = currentPt;
                ListPointCollection.Last().Add(pt);
            }
    Merci de toute aide que vous pourriez m'apporter, ou si j'ai manque quelquechose d'essentiel.

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    A mon avis, il manque une partie

Discussions similaires

  1. [DLL]Probleme utilisation DLL
    Par bubulle63 dans le forum Windows
    Réponses: 4
    Dernier message: 07/09/2006, 13h35
  2. probleme utilisation fonction split
    Par Lnmex dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 04/07/2006, 16h40
  3. Réponses: 8
    Dernier message: 19/06/2006, 15h31
  4. probleme utilisation de iis
    Par seb833434 dans le forum IIS
    Réponses: 2
    Dernier message: 15/06/2006, 17h19
  5. Probleme utilisation d'Objets managé grace a gcroot
    Par pepefourras dans le forum MFC
    Réponses: 4
    Dernier message: 16/05/2006, 00h26

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