2011-03-11 27 views
2

更新它似乎应用程序不知道打印任务何时完成,并保持连接无限期打开。有没有办法杀死这个连接?报告查看器在关闭后静默地挂起X

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

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

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

这三个线程仍然工作,有没有办法找出为什么他们保持开放?

没有旗标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; 
    } 
+4

使用Debug + Break All,Debug + Windows + Threads并找出你在那里看到的线程在做什么。 – 2011-03-11 16:36:53

+0

如果您有任何自定义线程,我会使用Hans技术在那里查看,您可能会有一些未设置为后台线程的滞留线程保持流程执行活动。 – 2011-03-11 16:39:01

+0

我已检查线程。还有三个仍在运行,我更新了这些问题,但我并没有自己创建任何线程,所以我不知道我怎么能找出我能做些什么。 – Andy 2011-03-11 16:54:03

回答

0

虽然扩展抑制从弹出的文件浏览器,该报告中的背景依然活跃。

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

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

1

它在没有调试的情况下运行时是否也一样?您可以调用writer.WriteAsync(),当您尝试关闭应用程序时,它有可能还在写入吗?

您应该为writeasync方法的完成连接一个事件。查看链接以获得一个使用XCompositeWriter和WriteCompleted回调的非常好的示例。

WPF Recipes