2010-02-05 5 views
0

Je rencontre des problèmes lors de l'utilisation d'un arrière-plan dans une application WPF. Voici la situation:Accès croisé à un objet non-ui dans wpf

J'essaie de faire deux choses. Numérisez d'abord un certain nombre d'images, puis utilisez la reconnaissance de code-barres sur les images numérisées. Je récupère les images numérisées sous la forme d'une liste d'objets BitmapSource et ceux-ci doivent être disponibles pour mon thread d'arrière-plan. Après quelques recherches, il semble que la plupart des solutions sont spécifiques à la communication avec les éléments de l'interface utilisateur sur le thread principal, car aucune des solutions que j'ai trouvées n'a fonctionné pour moi. J'ai essayé d'utiliser les délégués et le répartiteur, mais en vain.

J'ai besoin de BitmapSources pour créer des bitmaps avec eux qui est l'entrée de la reconnaissance de code à barres.

Merci,

Kevin

+0

alors quel est le problème réel auquel vous faites face? pouvez-vous poster du code? – hackerhasid

+0

Un thread BackgroundWorker a accès à tous les membres de la classe. Peut-être que vous devriez poster du code pour montrer un exemple de ce qui ne fonctionne pas. – scottm

Répondre

0

En WPF, tous DispatcherObjects (non seulement des éléments de l'interface utilisateur) sont accessibles uniquement à partir du fil qui les a créés. BitmapSource hérite (indirectement) de DispatcherObject, il suit donc cette règle. Cependant, il hérite également de Freezable et Freezable les objets peuvent être accédés à partir d'un autre thread s'ils sont gelés. Donc, après l'initialisation de votre BitmapSource, vous pouvez appeler Freeze, et il sera accessible à partir d'autres threads.

+0

Problème résolu, merci! – kwe

+0

qu'en est-il des autres éléments de l'interface utilisateur? Il semble que des éléments tels que «TextBlock» n'héritent pas de «DispatcherObject». :( –

+0

@conqenator, oui il le fait (indirectement) ... consultez la [documentation] (http://msdn.microsoft.com/fr-fr/library/system.windows.controls.textblock.aspx) (dans WPF, pas dans Silverlight) –

Questions connexes