C#多页打印异常:打印0-99时出现无限页数循环问题
问题分析与解决
你的代码陷入无限循环的核心原因是:每次触发PrintPage事件时,都会重新执行整个for (int i = 0; i < 100; i++)循环——也就是说每次打印新页面都会从i=0开始,永远无法完成100条数据的打印,只会不断重复打印前几行并触发新页面。
另外代码里还有一行语法错误的冗余代码:Convert.ToInt32(l_Position_Y), 100, 20);,需要删除。
修正后的代码
首先在类的级别定义成员变量记录当前打印进度:
private int _currentPrintIndex = 0; // 记录当前打印到第几个数字
然后修改打印相关方法:
public void printDemo() { _currentPrintIndex = 0; // 打印前重置起始索引 this.m_Print_Document.PrintPage += pd_Print_Page; this.m_Print_Document.Print(); } private void pd_Print_Page(object sender, PrintPageEventArgs pEvent) { float l_Position_Y = 1; float l_Page_Height = pEvent.MarginBounds.Height; Graphics g = pEvent.Graphics; // 使用using自动释放字体和画刷资源,避免内存泄漏 using (Font font1 = new Font("Arial", 9)) using (SolidBrush brush = new SolidBrush(Color.Black)) { // 从当前索引开始,直到填满一页或完成所有数据 while (_currentPrintIndex < 100) { if (l_Position_Y + 20 < l_Page_Height) { g.DrawString("Text" + _currentPrintIndex, font1, brush, 50, l_Position_Y); l_Position_Y += 20; _currentPrintIndex++; } else { pEvent.HasMorePages = true; // 退出循环,等待下一次PrintPage事件触发 return; } } // 所有数据打印完成,终止打印流程 pEvent.HasMorePages = false; } }
关键修改说明
- 用类成员变量
_currentPrintIndex替代局部循环变量,确保跨页面打印时能延续进度 - 改用
while循环更灵活控制打印终止条件 - 增加
using语句管理字体和画刷的资源释放 - 打印完成后显式设置
HasMorePages = false,结束打印流程
内容的提问来源于stack exchange,提问作者Laurent
相关产品推荐
相关产品推荐

