WPF : problème de thread et de dependency property
cs_Kite37
Messages postés242Date d'inscriptionlundi 6 mars 2006StatutMembreDernière intervention17 janvier 2018
-
5 oct. 2009 à 17:19
Jmix90
Messages postés11Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention23 mars 2010
-
1 mars 2010 à 00:04
Bonjour.
Dans le cadre d'un développement, j'ai créé un petit éditeur d'animation.
Le fonctionnement est simple : une classe animation qui contient les frames et la durée de chacune d'entre elle, et une classe player.
Cette dernière incorpore pas mal de dependency property (notamment sur la frame actuelle, le temps écoulé, le temps total de l'animation).
La "lecture" de l'animation se fait grace a une animation et un storyboard, qui fait varier une dependency property de 0 a la valeur contenue dans celle contenant le temps total, et faisant varier au passage les informations de frame.
L'éditeur marche bien, il ne comporte pas de bug (connus).
Le soucis, c'est que j'ai voulu intégrer ceci dans un petit jeu, et là je reçois assez souvent une erreur de type invalidOperation, qui me dit en gros que je ne peux modifier telle propriété car l'opération ne se déroule pas dans le thread qui l'a créé ...
Le plus étonnant, c'est que dans certaines circonstances, le morceau de code fautif ne renvoie aucune erreur !
Je sais que dis comme cela, ça risque de ne pas beaucoup vous éclairer, mais peut être avez vous déjà eu ce type de problèmes avec des dependecy et que vous avez une idée d'où cela peut venir ...
En espérant que quelqu'un pourra me dépanner,
Cordialement,
KiTe.
Ce qui nous tue pas nous rend plus fort,
Mais ce qui nous tue nous rend plus mort.
Jmix90
Messages postés11Date d'inscriptionmercredi 29 mai 2002StatutMembreDernière intervention23 mars 2010 1 mars 2010 à 00:04
Hello,
Lorsque tu utilises des DependencyProperty c'est dans un DependencyObject et celui ci ne peut être accéder que depuis le Thread qui l'a créé.
Quelques questions :
[list]
[*] Tes objets sont créés sur quel Thread ?
[*] Sont-ils utilisés sur un autre Thread (via un BackgroundWorker par exemple) ?
/list