進出口報告系統的工作,一系列DocumentPage
是通過DocumentPaginator
創建。這些文件包括許多WPF組件將被實例化,所以分頁程序包括正確的事情,當後發送到XpsDocumentWriter
(而這又被髮送到實際打印機)的。在後臺線程創建WPF組件
我現在的問題是,DocumentPage
情況下,需要一段時間來創造(足夠的Windows標記應用爲冷凍),所以我想在一個後臺線程,這是有問題來創建它們,因爲WPF期望的屬性從GUI線程設置它們。我還想顯示一個進度條,表明迄今爲止創建了多少頁面。因此,它看起來像我試圖讓兩件事情在GUI上平行發生。
這個問題很難解釋,我真的不知道如何解決它。總之:
- 創建一系列
DocumentPag
e's。- 包括WPF組件
- 這些都是要在後臺線程創建,或者使用一些其他的技巧,以便應用程序的心不是凍結。
- 在創建每個頁面後,應更新WPF ProgressBar。
如果沒有體面的方式來做到這一點,替代解決方案和方法是值得歡迎的。
設置apartmentstate可以讓我在後臺線程中創建WPF組件。但我需要稍後將它們移動到GUI線程。本文展示了一種方式(http://www.nbdtech.com/Blog/archive/2007/08/01/Passing-Wpf-Objects-Between-Threads-With-Source-Code.aspx),但是這是與FixedDocument,該方法不支持DocumentPage,因爲它缺少默認構造函數。有沒有辦法可以使用Freezable類將DocumentPage移動到GUI線程? – Mizipzor 2010-06-10 21:10:54
劃傷Freezable建議 - DocumentPage不從Freezable繼承,並且它包含一個Visual,因此創建DocumentPage的Freezable子類很困難。您提到的示例使用XamlReader和XamlWriter跨線程移動對象 - 也許您可以使用BinaryFormatter(或某種其他序列化方法)將DocumentPages序列化爲流,然後在另一側讀取它們? – 2010-06-10 21:27:54
看看BinaryFormatter,它看起來像使用XamlWriter的方法類似。也許它運作得更好,我看着它,謝謝。 =) – Mizipzor 2010-06-10 23:24:14