Vb.net et thread (chui sur ksé tou bete!)

MrDogbert Messages postés 133 Date d'inscription jeudi 26 octobre 2000 Statut Membre Dernière intervention 20 juillet 2004 - 9 mars 2004 à 20:37
MrDogbert Messages postés 133 Date d'inscription jeudi 26 octobre 2000 Statut Membre Dernière intervention 20 juillet 2004 - 9 mars 2004 à 22:43
j ai un petit soucis:

pour faire un moteur directDraw, je veux utiliser un thread qui boucle pour afficher sans cesse a l ecran le backbuffer(pour ceux qui connaissent)
Le thread est declaré avec en param l adresse de cette fonction :

Private Sub doFrame()
'Boucle principale pour l affichage
Do
'traiter les demandes de modification
If refaireBB = True Then traiter()

'renvoyer le tout a l ecran
afficher()

Application.DoEvents() 'relacher un peu la pression

Loop While sortir = False
sortir = False
End Sub

Le probleme c est que dès la premiere iteration j ai le msg d erreur suivant :

-------------------------------------------
Une exception non gérée du type 'System.InvalidCastException' s'est produite dans testDirectX.exe

Informations supplémentaires : Échec de QueryInterface pour l'interface DxVBLib.DirectDrawSurface7.
-------------------------------------------

Le code fonctionne parfaitement lorsque je n utilise pas de thread mais cela ne m arrange pas de laisser le trhread principal de l appli se charger de ca.
Les objets cités dans le code ont bien le bon type, normalement il y a tout ce qu il faut. alors? avez vous une solution docteur?

merci d avance a celui ou ceux qui pourront m aider

MRDOGBERT

2 réponses

MrDogbert Messages postés 133 Date d'inscription jeudi 26 octobre 2000 Statut Membre Dernière intervention 20 juillet 2004 1
9 mars 2004 à 20:54
Petite rectification, le code que j ai donné appel en fait ce code ci :

Private Sub redrawBackground()
If sortir = False Then
backBuffer.Blt(backBufferRect, _
background, _
backgroundRect, DDBLT_WAIT)
End If
End Sub

et c'est lui qui plante.
Precision, c est le premier code parcouru à traiter avec directX, si je le desactive, le suivant plantera avec le meme msg d erreur.

MRDOGBERT
0
MrDogbert Messages postés 133 Date d'inscription jeudi 26 octobre 2000 Statut Membre Dernière intervention 20 juillet 2004 1
9 mars 2004 à 22:43
Je m eclate tout seul a repondre a mes messages mais c est pour dire cette fois que j ai finalement trouvé ou etait le probleme.

Le thread ne peut pas accéder a certains objets du module dans le lequel il est déclaré, pour pallier au probleme utiliser ce code:

Dim lds As LocalDataStoreSlot
lds = thread.GetNamedDataSlot("background")
thread.SetData(lds, background)

Ca pourra peut etre en interesser quelques uns...

MRDOGBERT
0
Rejoignez-nous