2012-04-25 106 views
1

我需要從一大組數據中動態生成FlowDocument。由於該過程需要幾分鐘,所以我想在後臺線程上執行操作,而不是讓UI掛起。在BackgroundWorker線程上創建FlowDocument

但是,我無法在非UI線程上生成FlowDocument,否則會嘗試插入矩形和圖像會導致運行時錯誤,從而抱怨它不是STA線程。

有一對夫婦在計算器上線的,這似乎涉及我有同樣的問題...

Accessing a WPF FlowDocument in a BackGround Process

「WPF「在後臺進程訪問一個WPF的FlowDocument」:是它不可能在後臺線程中加載UI?「 WPF : Is it impossible to UI load in background thread?

在第一個環節有人提出以下建議:

「我會做什麼:使用的XamlWriter和序列化的FlowDocument成一個XDocument序列化任務涉及的調度,但一旦它的。完成後,您可以根據需要運行儘可能多的古怪並行數據分析,UI中的任何內容都不會影響它(同樣,一旦它是XDocument,您可以使用XPath查詢它,這是一個相當不錯的錘子,只要您遇到問題)「

有人能詳細說明authour的意思嗎?

許多TIA

+0

然後使用最終的FlowDocument創建XpsDocument,然後使用XAML中的DocumentViewer控件將其顯示爲FixedDocumentSequence。 – JamesPD 2012-04-25 10:02:09

+0

您是否在開始在後臺線程中生成內容之前,在ui線程上實例化了flowdocument?或類似的東西? – TheZenker 2012-04-25 14:24:45

回答

0

雖然不是真的一個答案,詳細闡述了你的報價方式的作者,也許這可以成爲你的問題的解決方案:如果你自己鉤入Application.Idle事件 ,你可以在那裏逐個構建您的FlowDocument。這個事件仍然在UI線程中,所以你不會像在後臺工作者那樣得到問題。 雖然你必須小心,不要一次做太多的工作,否則你會阻止你的應用程序。 如果可以將生成過程分成小塊,則可以在這種情況下逐個處理這些塊。