1

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();
       }
    }));
}
4

1 に答える 1