c# - 进行打印预览时是否有限制?

标签 c# winforms printing

我有一个应用程序可以提供打印功能并能够预览该打印件。使用 PrintPreviewDialog 处理打印预览.该应用程序是一个 C# WinForms .Net 4.0 应用程序。

本质上,该功能是打印(预览)多页报告,在这个特定实例中,它正在预览大量图像文件(每页 2 个图像大约 950 个)。

在这种情况下,应用程序在第 462 页抛出错误(因此与总数相差不远),此时以下任务管理器值可用:

  • 内存(PWS):~1.6GB
  • 处理量:~480
  • 用户对象:~300
  • GDI 对象:~1400

我确信内存(尽管很高)不是问题,因为我预计会发生内存不足异常。 GDI 对象有点多,但我不认为这太高(我相信默认限制是 10000?)

显示的实际异常消息总是有用的:

A generic error occurred in GDI+

其他一些需要注意的事情:

  • 这是在客户站点运行的应用程序,因此无法运行调试器
  • 图像首先作为 Image 对象的集合加载到内存中(这解释了高 GDI 对象计数)并且在这个阶段无法更改
  • 我还不确定这是否也是真正打印时的问题,显然没有人愿意浪费所有纸张,但我正在等待打印到 PDF 测试的结果

最后,我的问题是:是否有任何我应该注意的可能导致此行为的限制?例如可能在注册表中设置的 Windows 限制。与打印内存有关的东西?还是不同的 GDI 打印限制?

我是否可以运行任何进一步的测试来帮助诊断原因?

最佳答案

不知道有没有帮助,但可能不是系统限制的情况,而是文件锁。

您提到您正在使用 Image 将文件加载到内存中。 MSDN 说 here :

The file remains locked until the Image is disposed.

然后,如果您的程序试图触及它,GDI+ 就会发疯。

将图像保存到光盘时有时会出现错误,如下所示: Image.Save(..) throws a GDI+ exception because the memory stream is closed

也许尝试使用 FileShare.ReadWrite 选项将图像加载到 MemoryStream 中?

关于c# - 进行打印预览时是否有限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17550020/

相关文章:

c# - 使用 NHibernate 在 MVC3 中处理异常和回滚

c# - 无法使用 C# 以编程方式访问 iis 远程服务器

c# - 异常被忽略

C# - 如何在删除行后刷新 DataGridView

c# - 您会使用什么报告工具?

c# - 如何使用单个变量在单个循环中打印三角形?

c# - 在多个线程之间拆分循环

c# - Html.HiddenFor 绑定(bind)到错误的元素

c# - 如果已经打开,是否关注 winform?

css - 我的网站打印不正确