2011-08-08 64 views
3

我喜歡用binaryformatter來序列化流文檔。但它是例外。WPF:BinaryFormatter可以序列化FlowDocument實例嗎?

[Serializable] 
public class BinFlow 
{ 
    public FlowDocument my { get; set; } 
} 


BinFlow myBF = new BinFlow(); 
myBF.my = myFlowDocument; 

FileStream myFile = File.Create(@"d:\test.bin"); 
BinaryFormatter myBinaryFormat = new BinaryFormatter(); 

//exception occured here!! 
myBinaryFormat.Serialize(myFile, myBF); 

異常消息說「FlowDocument不會」可序列化的「proeprty」。

ps。當然,我可以使用XamlReader和XamlWriter來序列化FlowDocument。但我認爲二進制可以更快地完成這項工作。

回答

4

我假設您正在詢問您的相關問題 - 將您的FlowDocument從一個線程穿梭到另一個線程。我從來沒有使用BinaryFormatter取得任何成功。除非你的FlowDocument是非常大的(比如,超過100 MB),您可以輕鬆地將其保存到內存作爲內存流這樣的線程之間共享:

MemoryStream stream = new MemoryStream(); 
XamlWriter.Save(myFlowDoc, stream); 
stream.Position = 0; 

您可以在線程之間共享的MemoryStream,避免磁盤IO。在另一個線程上,使用MemoryStream中的XamlReader.Load。

如果你確實想用二進制格式將它寫到磁盤上,我得說Xaml,然後使用壓縮庫生成一個ZIP文件,就像XPS一樣。

相關問題