Средство просмотра отчетов зависает молча после закрытия с X - PullRequest
2 голосов
/ 11 марта 2011

Обновление создается впечатление, что приложение не знает, когда задача печати завершена, и сохраняет соединение открытым на неопределенный срок.есть ли способ разорвать это соединение?

когда я отлаживаю wpf с помощью средства просмотра отчетов и печатаю документ, я не могу полностью закрыть wpf.

я нажимаюX на окне, и окно закрывается, но vs продолжает работать.Приостановка не показывает, где она висит, хотя в wpf нет потоков.

мы перезаписали печать, чтобы пропустить диалоговое окно, но попытка установить все в ноль после запуска не помогает,Есть идеи, почему он продолжает висеть?(закрытие приложения до его печати работает нормально.)

Эти три потока все еще работают, есть ли способ выяснить, почему они остаются открытыми?

Unflagged 1424 7 Рабочий поток vshost.RunParkingWindow[Управляемый в собственный переход] Нормальный

Не отмеченный 4320 8 Рабочий поток .NET SystemEvents [Управляемый в собственный переход] Нормальный

Не отмеченный> 4332 9 Основной поток Основной поток [Управляемый в собственный переход] Нормальный

        protected override void OnPrintCommand()
    {
        PrintDialog printDialog = new PrintDialog();
        printDialog.PrintQueue = LocalPrintServer.GetDefaultPrintQueue();
        printDialog.PrintTicket = printDialog.PrintQueue.DefaultPrintTicket;

        FixedDocument fixedDocument = this.Document as FixedDocument;               
        FixedDocumentSequence fixedDocumentSequence = this.Document as FixedDocumentSequence;               
        if (fixedDocument != null) fixedDocument.PrintTicket = printDialog.PrintTicket;               
        if (fixedDocumentSequence!= null) fixedDocumentSequence.PrintTicket = printDialog.PrintTicket;               

        XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(printDialog.PrintQueue);              
        if (fixedDocument != null) writer.WriteAsync(fixedDocument, printDialog.PrintTicket);               
        if (fixedDocumentSequence != null) writer.WriteAsync(fixedDocumentSequence, printDialog.PrintTicket);

        printDialog = null;
        fixedDocument = null;
        fixedDocumentSequence = null;
        writer = null;
    }

Ответы [ 2 ]

1 голос
/ 11 марта 2011

Делает ли он то же самое при запуске без отладки?Вы вызываете writer.WriteAsync (), возможно ли, что он все еще пишет, когда вы пытаетесь закрыть приложение?

Вероятно, вам следует подключить событие для завершения метода writeasync.См. Ссылку для довольно хорошего примера использования XpsDocumentWriter с обратным вызовом WritingCompleted.

Рецепты WPF

0 голосов
/ 14 марта 2011

Несмотря на то, что расширение подавляло всплывающее окно просмотра документа, отчет оставался активным в фоновом режиме.

Решение было простым: не подавлять средство просмотра, распечатать документ и затем закрыть средство просмотра.При желании вы также можете скрыть средство просмотра перед его закрытием.

Приложение закрывается после этого исправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...