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 :

Problème de concurrence


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2022
    Messages : 12
    Par défaut Problème de concurrence
    Bonjour,
    J'ai un UserControl que j'utilise pour afficher un graphique. Je fais un rendu de se même UserControl pour pouvoir exporter mon graphique en PNG. J'ai un problème de concurrence à ce moment la.

    Pour exporter mon graphique, je fais une instance de ce UserControl depuis le thread d'affichage Dispatcher.CurrentDispatcher.Invoke(...), dans mon user contrôle je tente d'accèder à une variable de configuration du graph.

    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
     
             private void StandardTestGraphView_OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
            {
                if (DataContext is not GraphMaker graphMaker) return;
     
                //Endroit du crash 
                var x = graphMaker.GraphInformation.Configuration.LegendPosition?.X;
                var y = graphMaker.GraphInformation.Configuration.LegendPosition?.Y;
                if (x != null && y != null && (x != 0 || y != 0))
                {
                    LegendStackPanel.HorizontalAlignment = HorizontalAlignment.Left;
                    LegendStackPanel.VerticalAlignment = VerticalAlignment.Top;
     
                    _transform = graphMaker.GraphInformation.Configuration.LegendPosition;
                }
                else
                {
                    _transform = new TranslateTransform();
                }
                LegendStackPanel.RenderTransform = _transform;
            }
    La propriété en question qui me pose problème est LegendPosition. J'ai tenté de mettre un Dispatcher dans cette méthode, aussi de faire un autre Thread mais rien ne m'aide. Je suis donc ici pour savoir si quelqu'un pourrait m'aider à debug cette situation.

    Quelques précisions, j'arrive à lire graphMaker.GraphInformation.Configuration sans problème, j'ai mis des lock dans le code behind de mon UserControl, j'ai tenté de cloner LegendPosition qui est un TranslateTransform, utilisé la class Monitor pour lock mon object, rien n'a fonctionné.

    Voici l'erreur: The calling thread cannot access this object because a different thread owns it

    Merci d'avance de m'avoir lu. Je suis ouvert à la discussion et demandez moi s'il vous faut plus d'infromations.

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2022
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Suisse

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

    Informations forums :
    Inscription : Octobre 2022
    Messages : 12
    Par défaut
    Citation Envoyé par Haswell19 Voir le message
    Bonjour,
    J'ai un UserControl que j'utilise pour afficher un graphique. Je fais un rendu de se même UserControl pour pouvoir exporter mon graphique en PNG. J'ai un problème de concurrence à ce moment la.

    Pour exporter mon graphique, je fais une instance de ce UserControl depuis le thread d'affichage Dispatcher.CurrentDispatcher.Invoke(...), dans mon user contrôle je tente d'accèder à une variable de configuration du graph.

    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
     
             private void StandardTestGraphView_OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
            {
                if (DataContext is not GraphMaker graphMaker) return;
     
                //Endroit du crash 
                var x = graphMaker.GraphInformation.Configuration.LegendPosition?.X;
                var y = graphMaker.GraphInformation.Configuration.LegendPosition?.Y;
                if (x != null && y != null && (x != 0 || y != 0))
                {
                    LegendStackPanel.HorizontalAlignment = HorizontalAlignment.Left;
                    LegendStackPanel.VerticalAlignment = VerticalAlignment.Top;
     
                    _transform = graphMaker.GraphInformation.Configuration.LegendPosition;
                }
                else
                {
                    _transform = new TranslateTransform();
                }
                LegendStackPanel.RenderTransform = _transform;
            }
    La propriété en question qui me pose problème est LegendPosition. J'ai tenté de mettre un Dispatcher dans cette méthode, aussi de faire un autre Thread mais rien ne m'aide. Je suis donc ici pour savoir si quelqu'un pourrait m'aider à debug cette situation.

    Quelques précisions, j'arrive à lire graphMaker.GraphInformation.Configuration sans problème, j'ai mis des lock dans le code behind de mon UserControl, j'ai tenté de cloner LegendPosition qui est un TranslateTransform, utilisé la class Monitor pour lock mon object, rien n'a fonctionné.

    Voici l'erreur: The calling thread cannot access this object because a different thread owns it

    Merci d'avance de m'avoir lu. Je suis ouvert à la discussion et demandez moi s'il vous faut plus d'infromations.

    Afin de corriger mon problème, je créé LegendPosition toujours depuis le même thread afin d'assurer le bon fonctionnement de mon programme.

  3. #3
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 907
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 907
    Par défaut
    Pour être franc, je crois que la plupart ont compris la solution à la hauteur du nombre de réponses que tu as reçues ...

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

Discussions similaires

  1. même problème acces concurrent aux fichiers sur le serveur
    Par al3alwa dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 11/06/2007, 16h51
  2. Problème de concurrence dans mon updateCommand
    Par Freygolo dans le forum VB.NET
    Réponses: 7
    Dernier message: 07/06/2007, 08h32
  3. [EJB2] Problème accès concurrents/transaction
    Par Gevaudan35 dans le forum Java EE
    Réponses: 3
    Dernier message: 18/10/2006, 19h22
  4. Appli Web, problème accès concurrent
    Par the java lover dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 12/06/2006, 10h11
  5. (débutant) Problème accès concurrents
    Par lolo... dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/12/2005, 08h49

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