Im работает над системой отчетности, серия DocumentPage
должна быть создана через DocumentPaginator
. Эти документы включают в себя ряд компонентов WPF, которые должны быть созданы таким образом, чтобы страница содержала правильные вещи, когда позже отправляется на XpsDocumentWriter
(который, в свою очередь, отправляется на фактический принтер).Создание компонентов WPF в фоновом потоке
Моя проблема сейчас в том, что DocumentPage
случаев занять некоторое время, чтобы создать (достаточно для Windows, чтобы пометить приложение, как замороженная), поэтому я попытался создать их в фоновом потоке, что проблематично, так как WPF ожидает, что атрибуты на них можно установить из потока графического интерфейса. Я также хотел бы показать индикатор выполнения, указав, сколько страниц было создано до сих пор. Таким образом, похоже, что я пытаюсь заставить две вещи произойти в параллельном интерфейсе графического интерфейса.
Проблема трудно объяснить, и я действительно не уверен, как ее решить. Короче говоря:
- Создайте серию
DocumentPag
e.- К ним относятся компоненты WPF
- Они должны быть созданы на фоне потока, или использовать какой-либо другой трюк, так разве приложение заморожено.
- После создания каждой страницы необходимо обновить WPF ProgressBar.
Если нет достойного способа сделать это, альтернативные решения и подходы более чем приветствуются.
Настройка квартиры позволяет мне создавать компоненты WPF в фоновом потоке. Но мне нужно переместить их в поток графического интерфейса позже. Эта статья показала путь (http://www.nbdtech.com/Blog/archive/2007/08/01/Passing-Wpf-Objects-Between-Threads-With-Source-Code.aspx), но это было с FixedDocument, подход не работает с DocumentPage, поскольку в нем отсутствует конструктор по умолчанию. Есть ли способ использовать класс Freezable для перемещения DocumentPage в поток графического интерфейса? – Mizipzor
Устранить предложение Freezable - DocumentPage не наследует от Freezable и содержит Visual, поэтому было бы трудно создать подклассу Freezable DocumentPage. В приведенном примере используется XamlReader и XamlWriter для перемещения объекта по потокам - возможно, вы могли бы использовать BinaryFormatter (или какой-либо другой метод сериализации) для сериализации DocumentPages для потока, а затем читать их обратно с другой стороны? –
Глядя на BinaryFormatter, похоже, что подход похож на тот, который использует XamlWriter. Возможно, он работает лучше, я смотрю на него, спасибо. знак равно – Mizipzor