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:
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.