Как я могу проверить, отменил ли пользователь печать из очереди печати? - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь распечатать компонент 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;
    }

Очередь печати

...