2010-11-02 3 views
2

J'ai un code qui utilise l'interopérabilité WPF où j'ai l'élément WPF qui est ajouté en tant que contrôle utilisateur dans les formulaires Windows. J'utilise le WPF pour la vue 3D où j'ajoute une sphère dynamiquement et ça marche bien, tout ce que je fais c'est juste envoyer x, y et rayon du formulaire à WPF et ça dessine la sphère. Maintenant, voici le problème que j'ai fait une boucle qui lit la liste des coords et les dessine dans le contrôle WPF, cela fonctionne parfaitement si j'ajoute un MsgBox vide mais si je supprime le MsgBox, il montre seulement la dernière sphère dans la liste, Ex:Si je supprime le MsgBox le code ne fonctionne pas, Comment est-ce possible et comment le réparer?

For Each obj As Sphere in LstSpheres 

     MsgBox("") 'If I remove this the code doesn't work 
     CreateSphere(obj.x, obj.y, obj.radius, Brushes.Red) 'This Sub adds the Sphere in WPF Control 

    Next 

Comment est-ce possible, et comment cela peut-il être réparé?

MISE À JOUR:

CreateSphere 

     Dim S As New Sphere ' a ready made object I took and it doesn't use threaing 
     S.Radius = Radius 
     S.X = x 
     S.Y = y 
     S.BrushColor = Color 
     My3DViewport3D.Children.Add(S) 
+0

À quoi ressemble la méthode 'CreateSphere'? –

+0

Alors, que se passe-t-il dans CreateSphere? Threading peut-être? Effacer l'écran? –

+0

@Martinho Fernandes Je n'utilise pas de thread, je vais ajouter le code – Kronass

Répondre

0

Ma première hypothèse serait un problème de filetage? Peut-être que le fait d'arrêter le code pour la boîte de message laisse assez de temps pour que le dernier CreateSphere se termine?

+0

Je pense à ça aussi mais je n'utilise aucun thread – Kronass

1

Je suis curieux de savoir ce qui se passe si vous faites quelque chose comme ça.

Dim temp As String = "" 

For Each obj As Sphere in LstSpheres 
    CreateSphere(obj.x, obj.y, obj.radius, Brushes.Red) 
    temp &= "[" & My3DViewport3D.Children.Count & "]" 
Next 

MsgBox(temp) 
+0

Le nombre de sphères insérées est affiché – Kronass

+0

N'importe comment j'ai résolu le problème en mettant la fonction créer une sphère dans un minuteur qui s'exécute toutes les 5 millisecondes, j'ai essayé de filer mais ça n'a pas marché. Merci quand même – Kronass

Questions connexes