Как написать асинхронные фоновые рабочие, которые работают на потоковом документе WPF - PullRequest
0 голосов
/ 22 мая 2010

Я пытаюсь написать рабочий фон, который обрабатывает потоковый документ.Я не могу получить доступ к свойствам объектов flowdocument из-за проверки потока.Я попытался сериализовать документ и загрузил его в рабочий поток, что фактически решило проблему проверки потока.Однако, как только обработка завершена, мне также нужно использовать такие вещи, как объекты TextPointer.Эти объекты теперь указывают на объекты в копии, а не на оригинал.

Кто-нибудь может предложить лучший способ приблизиться к такой фоновой обработке в WPF?

1 Ответ

1 голос
/ 20 июля 2010

Вы не можете, доступ к объектам WPF возможен только из потока, который их создал, поэтому по определению вы не можете выполнять на них фоновую обработку.

Но, как вы уже обнаружили, вы можете использовать методы сериализации, чтобы создать копию в другом потоке, и вы можете сериализовать результат обратно.

XamlWriter / XamlReader может сериализовать почти каждый объект WPF, но может работать медленно на больших графах объектов.

А для TextPointer возможно вы можете использовать GetOffsetToPosition / GetPositionAtOffset, чтобы воссоздать эквивалентный TextPointer обратно в основной поток.

Другим вариантом является использование freezables, объекты, наследуемые от Freezeable, могут использоваться из других потоков (после вызова метода Freeze), документы не замораживаются, а чертежи и геометрии - так что вы можете передавать фрагменты документа » между нитями как рисунки.

...