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.