1

큰 데이터 집합에서 FlowDocument를 동적으로 생성해야 할 필요가 있습니다. 이 프로세스는 몇 분이 걸리기 때문에 UI를 정지시키지 않고 백그라운드 스레드에서 작업을 수행하고 싶습니다.BackgroundWorker 스레드에서 FlowDocument 만들기

그러나 UI가 아닌 스레드에서는 FlowDocument를 생성 할 수 없습니다. 그렇지 않으면 Rectangle 및 이미지를 삽입하려고하면 런타임 오류가 발생하여 STA 스레드가 아니라고 불평합니다.

나는 데 같은 문제를 포함하는 것에 StackOverflow에 대한 스레드의 몇 ... 있습니다

Accessing a WPF FlowDocument in a BackGround Process

"WPF"백그라운드 프로세스에 WPF FlowDocument 액세스 "

:인가 백그라운드 스레드에서 UI로드가 불가능합니까? "

"내가 할 거라고 무엇 :하여 XDocument로 XamlWriter를 사용하여 FlowDocument를 직렬화 직렬화 작업이 디스패처 포함하지만 일단. 제 1 링크 누군가 WPF : Is it impossible to UI load in background thread?

다음과 같은 제안 다행스럽게도 원하는만큼 데이터의 병렬 분석을 실행할 수 있으며 UI의 아무 것도 영향을 미치지 않습니다. (XPath로 쿼리하면 XPath로 쿼리 할 수 ​​있습니다. XPath는 문제가있는 한 꽤 좋은 해머입니다. 실제로 손톱.) "

누군가가 authour가 이것으로 무엇을 의미하는지 자세히 설명해 줄 수 있습니까?

많은 TIA

+0

마지막 FlowDocument를 사용하여 XpsDocument를 만든 다음 XAML의 DocumentViewer 컨트롤을 사용하여 FixedDocumentSequence로 표시합니다. – JamesPD

+0

백그라운드 스레드에서 컨텐츠를 생성하기 전에 UI 스레드에서 flowdocument를 인스턴스화합니까? 또는 비슷한 무엇입니까? – TheZenker

답변

0

견적 수단의 저자는, 어쩌면이 문제에 대한 해결책이 될 수 있는지에 정교화에 대한 답변하지 정말 동안 : 당신이 Application.Idle 이벤트에 자신을 훅 경우 , 당신이 할 수있는 거기에 하나씩 FlowDocument를 빌드하십시오. 이 이벤트는 여전히 UI 스레드에 있으므로 백그라운드 작업자와 같은 문제는 발생하지 않습니다. 여러분은 한번에 너무 많은 일을하지 않도록주의해야합니다. 그렇지 않으면 신청을 차단하게 될 것입니다. 생성 프로세스를 작은 청크로 분리 할 수 ​​있다면이 이벤트에서 해당 청크를 하나씩 처리 할 수 ​​있습니다.