我正在尝试打印多个PDF字节数组。由于我需要允许用户同时打印多个报告的功能,因此我使用的是Parallel foreach。该函数通过第一个字节数组很好,但在第二个Dequeue上,我得到“在实例化枚举数后修改了集合”。错误。如何在允许用户同时打印的同时解决此问题?
以下是代码:
public static void PrintingQueue(Queue<byte[]> printQueue, string printer, int copies)
{
Parallel.ForEach(printQueue, (currentFile) =>
{
var printFile = printQueue.Dequeue();
PrintWithGSPrint(printFile, printer, copies);
});
}
答案 0 :(得分:3)
例外是告诉你发生了什么。在修改集合时,foreach语句无法正确执行。使用Dequeue
方法,您将从正在迭代的集合中删除项目。不要删除foreach循环内的项目,只需在完成任务后清理集合。
https://msdn.microsoft.com/en-us/library/1c8bzx97(v=vs.110).aspx
您可以做的另一件事是使用for
语句向后遍历您的集合。这样,如果必须,您将能够删除元素。您可以使用此答案来查看如何向后迭代:https://stackoverflow.com/a/1582317/637840
答案 1 :(得分:1)
试试这个解决方案:
Parallel.ForEach方法为您提供队列中每个项目的参数。在方法中使用该参数进行打印。然后在完成后清除队列。
public static void PrintingQueue(Queue<byte[]> printQueue, string printer, int copies)
{
Parallel.ForEach(printQueue, (currentFile) =>
{
PrintWithGSPrint(currentFile, printer, copies);
});
printQueue.Clear();
}