1

У меня есть необходимость генерировать динамическое создание FlowDocument из большого набора данных. Поскольку процесс занимает несколько минут, я хотел бы выполнить операцию в фоновом потоке, а не зависать.Создание FlowDocument в потоке BackgroundWorker

Однако я не могу сгенерировать FlowDocument для потока, отличного от UI, в противном случае попытки вставить Rectangles and Images вызывают ошибки времени выполнения, жалуясь, что это не поток STA.

Есть несколько потоков на StackOverflow, которые, кажется, связаны с той же проблемой, что я, имеющий ...

«Доступ к WPF FlowDocument в Фоновый процесс» Accessing a WPF FlowDocument in a BackGround Process

«WPF: Есть невозможно ли загружать пользовательский интерфейс в фоновом потоке? " WPF : Is it impossible to UI load in background thread?

В первой ссылке кто-то предлагает следующее:

«То, что я хотел бы сделать: использовать XamlWriter и сериализовать FlowDocument в XDocument Задача Сериализация вовлекает грузоотправитель, но как только это. вы можете запускать как можно больше дурацких параллельных анализов данных, как вы хотите, и ничто в интерфейсе не повлияет на него. (Также, когда это XDocument, вы запрашиваете его с XPath, что является довольно хорошим молотом, если ваши проблемы на самом деле гвозди.) "

Может ли кто-нибудь уточнить, что означает authour?

Многие ТИА

+0

Окончательный FlowDocument затем используется для создания XpsDocument, который затем отображается как FixedDocumentSequence с помощью элемента управления DocumentViewer в XAML. – JamesPD

+0

Вы создаете экземпляр flowdocument в потоке ui, прежде чем начинаете генерировать контент в фоновом потоке? или что-то подобное? – TheZenker

ответ

0

Пока не НАСТОЯЩИЙ ответ на уточняя, что автор вашей цитаты средств, может быть, это может быть решением вашей проблемы: Если вы подключаетесь себя в Application.Idle событие, вы можете создайте свой FlowDocument один за другим там. Это событие все еще находится в потоке пользовательского интерфейса, поэтому у вас не будет проблем, например, у рабочего. Altho вы должны быть осторожны, чтобы не делать слишком много работы сразу, иначе вы заблокируете свое приложение. Если вы можете разделить процесс генерации на небольшие куски, вы можете обрабатывать эти куски один за другим в этом случае.