1

当我尝试写入 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();
       }
    }));
}
4

1 回答 1

0

为什么不使用异步模式,例如asyncawait或 Tasks?这样你就不必费心穿线了。

于 2013-07-11T16:57:15.810 回答