当我尝试写入 XPS 文档时,为什么会出现这个奇怪的异常?
XpsPackagingException:
Package already has a root DocumentSequence or FixedDocument.
我的目标是将 WPF Visual 打印到 XPS 文件中,但由于视觉树太大,打印过程可能会很慢,所以我想知道如何在后台线程上打印 XPS 文件,所以我的用户不会因为冻结的应用程序而烦恼。
这是我的代码:
Dispatcher otherThreadDispatcher;
public MainWindow()
{
InitializeComponent();
Thread thread = new Thread(() =>
{
otherThreadDispatcher = Dispatcher.CurrentDispatcher;
printIt.Click += new RoutedEventHandler(printIt_Click);
System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
void printIt_Click(object sender, RoutedEventArgs e)
{
otherThreadDispatcher.Invoke(new Action(() =>
{
using (XpsDocument myDoc = new XpsDocument("foo.xps", FileAccess.ReadWrite))
{
XpsDocumentWriter writer = XpsDocument.CreateXpsDocumentWriter(myDoc);
var collator = writer.CreateVisualsCollator();
collator.BeginBatchWrite();
collator.Write(someImageToPrint);
collator.EndBatchWrite();
}
}));
}