【发布时间】:2013-12-10 09:34:50
【问题描述】:
我目前正在开发一个应用程序,该应用程序创建许多 WPF 控件,对它们进行批处理,然后将它们发送到打印机。
我遇到的问题是应用程序在创建下一批之前等待上一批完成。这意味着打印机正在等待第二批,而不是在完成第一批打印后准备就绪。
有什么方法可以发送一个固定的文档来异步打印??
这是我目前所拥有的......
void PrintInBatch(IList<object> objsToPrint, int batchSize)
{
int printed = 0;
while (printed < objsToPrint.Count())
{
IList<object> batchToPrint = objsToPrint.Skip(printed).Take(batchSize);
this.Print(batchToPrint);
printed += batchSize;
}
}
void Print(IList<object> objsToPrint)
{
const double width = 5.8*96;
const double height = 8.3*96;
var pageSize = new Size(width, height); // A5 page, at 96 dpi
var document = new FixedDocument();
document.DocumentPaginator.PageSize = pageSize;
int iii = 0;
//Add packslips to document
foreach (object objToPrint in objsToPrint)
{
PrintControl printControl = new PrintControl();
printControl.SetDetails(objToPrint);
var fixedPage = new FixedPage();
fixedPage.Width = pageSize.Width;
fixedPage.Height = pageSize.Height;
fixedPage.Children.Add(printControl);
fixedPage.Measure(pageSize);
fixedPage.Arrange(new Rect(new Point(), pageSize));
fixedPage.UpdateLayout();
var pageContent = new PageContent();
((IAddChild) pageContent).AddChild(fixedPage);
document.Pages.Add(pageContent);
}
PrintQueue queue = new LocalPrintServer().GetPrintQueue(printerName);
dlg.PrintQueue = queue;
PageMediaSize pageMedia = new PageMediaSize(PageMediaSizeName.ISOA5);
dlg.PrintTicket.PageMediaSize = pageMedia;
dlg.PrintTicket.Duplexing = Duplexing.OneSided;
dlg.PrintDocument(document.DocumentPaginator, "Packslips"); //Program waits here until print finished
}
我尝试在单独的线程上运行 dlg.PrintDocument() 方法,但这会导致错误。
有什么想法吗??
谢谢
更新
我已尝试线程化 PrintInBatch();这确实有效,但这意味着每个批次都是同时创建的,这是一个巨大的资源消耗。
我是这样做的:
void PrintInBatch(IList<object> objsToPrint, int batchSize)
{
int printed = 0;
while (printed < objsToPrint.Count())
{
IList<object> batchToPrint = objsToPrint.Skip(printed).Take(batchSize);
Thread thread = new Thread(() => this.Print(batchToPrint));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
printed += batchSize;
}
}
【问题讨论】:
-
你能发布你的错误吗?
标签: c# c#-4.0 printing batch-processing