我也设法弄清楚,为我工作用不同的方式...
我MyPrintFileDetail类的列表中的每个包含的PrintDocument和一个StreamReader说文件。
设置我的PrintDocument时,我添加了一个PrintPage事件。在PrintPage事件处理程序中,我通过将“发件人”投射到PrintDocument来识别正在处理的PrintDocument。然后编写一个foreach循环来从列表中识别正在工作的MyPrintFileDetail对象以获取我用来打印的StreamReader。一旦没有更多的行要打印,我放弃了StreamReader并将其设置为null。
然后在我的Timer回调中处理MyPrintFileDetail对象列表,我检查了StreamReader为null,如果为null,我完成了打印。
有点笨重,但它的工作。
private void PD_PrintPage(object sender, PrintPageEventArgs e)
{
PrintDocument p = (PrintDocument)sender;
PrintFileDetail pfdWorkingOn = null;
foreach (PrintFileDetail pfd in pfds)
{
if (pfd._PrintDoc.DocumentName == p.DocumentName)
{
pfdWorkingOn = pfd;
break;
}
}
float yPos = 0f;
int count = 0;
float leftMargin = e.MarginBounds.Left;
float topMargin = e.MarginBounds.Top;
string line = null;
float linesPerPage = e.MarginBounds.Height/_TextFilePrintingFont.GetHeight(e.Graphics);
while (count < linesPerPage)
{
line = pfdWorkingOn._TxtFileBeingPrinted.ReadLine();
if (line == null)
{
break;
}
yPos = topMargin + count * _TextFilePrintingFont.GetHeight(e.Graphics);
e.Graphics.DrawString(line, _TextFilePrintingFont, Brushes.Black, leftMargin, yPos, new StringFormat());
count++;
}
if (line != null)
{
e.HasMorePages = true;
}
else
{
pfdWorkingOn._TxtFileBeingPrinted.Dispose();
pfdWorkingOn._TxtFileBeingPrinted = null;
}
}
双+1,对于问题和答案:-D – peenut 2012-10-12 11:01:27
以上方法是在对PrintDocument的所有页面都被缠绕。它不检查工作是否完成。如果您想检查作业何时完成,请查看[PrintQueue](https://msdn.microsoft.com/en-us/library/system.printing.printqueue(v = vs.110).aspx)。 – 2016-04-12 05:06:09