XPS ドキュメントに書き込もうとすると、この奇妙な例外が発生するのはなぜですか?
XpsPackagingException:
Package already has a root DocumentSequence or FixedDocument.
私の目標は、WPF ビジュアルを 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();
}
}));
}