Я пытаюсь распечатать компонент WPF через XPS Writer, Есть много страниц (в 100). Печать занимает много времени. Вот почему я использовал Thread.Sleep для имитации этого. Во время печати этих страниц. Пользователь может отменить печать из очереди печати окон. Я могу напечатать это легко, но если пользователь отменит это. Выдает исключение в
collator.EndBatchWrite (); Сообщение об исключении
private void Print_Click(object sender, RoutedEventArgs e)
{
PrintDialog printDialog = new PrintDialog();
if (printDialog.ShowDialog() == true)
{
PrintQueue printQueue = printDialog.PrintQueue;
XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(printQueue);
SerializerWriterCollator collator = writer.CreateVisualsCollator();
collator.BeginBatchWrite();
collator.Write(VisualLE());
Thread.Sleep(20000);
collator.Write(VisualLE());
collator.EndBatchWrite();
}
}
private static ContainerVisual VisualLE()
{
ContainerVisual newPage = new ContainerVisual();
FixedPage fixedPage;
Border border = new Border();
border.Height = 400;
border.Width = 400;
border.BorderThickness = new Thickness(1);
border.BorderBrush = new SolidColorBrush(Color.FromRgb(1, 1, 1));
fixedPage = new FixedPage();
Size size = new Size(600, 600);
fixedPage.Height = size.Height;
fixedPage.Width = size.Width;
fixedPage.Children.Add(border);
fixedPage.Measure(size);
fixedPage.Arrange(new Rect(new Point(), size));
fixedPage.UpdateLayout();
newPage.Children.Add(fixedPage);
return newPage;
}
Очередь печати