0

J'essaye d'écrire un worker d'arrière-plan qui traite un flowdocument. Je ne peux pas accéder aux propriétés des objets flowdocument à cause de la vérification du thread. J'ai essayé de sérialiser le document et l'ai chargé sur le thread de travail qui a réellement résolu le problème de verfication de fil. Cependant, une fois le traitement terminé, j'ai aussi besoin d'utiliser des choses comme des objets TextPointer. Ces objets pointent maintenant vers des objets dans la copie et non l'original.Comment écrire des travailleurs d'arrière-plan asynchrones qui fonctionnent sur WPF flowdocument

Quelqu'un peut-il suggérer la meilleure façon d'aborder ce traitement en arrière-plan dans WPF?

Répondre

1

Vous ne pouvez pas accéder aux objets WPF à partir du thread qui les a créés. Par conséquent, vous ne pouvez pas effectuer de traitement en arrière-plan. Mais, comme vous l'avez déjà découvert, vous pouvez utiliser des techniques de sérialisation pour créer une copie dans un autre thread et vous pouvez sérialiser le résultat. XamlWriter/XamlReader peut sérialiser presque tous les objets WPF, mais peut être lent sur les grands graphiques d'objets. Pour TextPointer, peut-être vous pouvez utiliser GetOffsetToPosition/GetPositionAtOffset pour recréer un TextPointer équivalent dans le thread principal

Une autre option est d'utiliser des freezables, les objets qui héritent de Freezeable peuvent être utilisés depuis d'autres threads (après que la méthode Freeze soit appelée), les documents ne sont pas freezable mais le dessin et les géométries sont - donc vous pouvez transférer du document fragments "entre les fils comme des dessins.