Bonjour à tous,

j'ai eu quelques problèmes récemment avec le multi-threading et j'ai réussi jusqu'à présent en utilisant d'autres types, en faisant un peu de bricolage. Mais là je suis face à une erreur que je ne comprends pas.

Dans la boucle ci-dessous qui s'exécute parallèlement grâce à Parallel.ForEach, qui énumère tous les éléments de la liste list qui contient des Model3D, je crée deux objets qui sont des parties spéciales de currentChildModel3D, la variable locale du foreach en gros.
Et j'ai l'erreur comme quoi le thread n'a pas accès à l'objet car il n'en ai pas propriétaire, alors que je viens de le créer en local dans la boucle ! Pourtant il me semble bien que mon instanciation d'objet ne correspond pas à une référence mais bien à un type valeur... Je vous laisse juger:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
Parallel.ForEach(listChildModel3D, currentChildModel3D =>
                {
                    GeometryModel3D gm1 = new GeometryModel3D();
                    gm1 = (GeometryModel3D)currentChildModel3D;

                    MeshGeometry3D mesh1 = new MeshGeometry3D(); 
                    mesh1 = gm1.Geometry as MeshGeometry3D;//Le thread appelant ne peut pas accéder à l'objet car il n'en ai pas propriétaire
                    
Geometry g2 = Create2DGeometryFromModel3D(currentChildModel3D, matrixList[listChildModel3D.IndexOf(currentChildModel3D)],gm1,mesh1 );
                    g1.Children.Add(g2); //Ajout à la variable globale, un GeometryGroup

                });
Je ne vois vraiment pas d'où provient l'erreur étant donné que la variable mesh1 est locale !

Si quelqu'un avait une idée ce serait super !

Merci d'avance