使用X关闭后,报表查看器将以静默方式挂起

时间:2011-03-11 16:34:10

标签: c# visual-studio-2010 memory printing

更新似乎应用程序不知道打印任务何时完成,并且无限期地保持连接打开。有没有办法杀死这个连接?

当我使用报表查看器调试wpf并打印文档时,我似乎无法完全关闭wpf。

我按下窗口上的X,窗口关闭,但vs继续运行。暂停不会显示它保持挂起的位置,并且wpf中没有任何线程。

我们覆盖了打印以跳过对话框,但尝试在运行后将所有内容设置为null并没有帮助。任何想法为什么它一直挂? (在打印之前关闭应用程序工作正常。)

这三个主题仍然有效,有没有办法找出他们为什么保持开放?

Unflagged 1424 7工作线程vshost.RunParkingWindow [管理到本机转换]正常

Unflagged 4320 8工作线程.NET SystemEvents [管理到本机转换]正常

Unflagged> 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 个答案:

答案 0 :(得分:1)

在没有调试的情况下运行它时是否也这样做?你调用writer.WriteAsync(),当你试图关闭应用程序时它是否仍然在写?

您可能应该连接一个事件以完成writeasync方法。有关将XpsDocumentWriter与WritingCompleted回调一起使用的一个很好的示例,请参阅该链接。

WPF Recipes

答案 1 :(得分:0)

虽然扩展程序禁止弹出文档查看器,但报告仍在后台保持活动状态。

解决方案很简单,不要压制查看器,打印文档然后关闭查看器。您也可以选择在关闭之前隐藏查看器。

此修复后应用程序自动关闭。