2017-02-17 729 views
1

我試圖打印多個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); 

     }); 
    } 

回答

3

唯一的例外是告訴你發生了什麼。隨着集合被修改,foreach語句無法正確執行。使用Dequeue方法,您將從要迭代的集合中刪除項目。不要刪除foreach循環中的項目,只需在完成任務後清理集合。

https://msdn.microsoft.com/en-us/library/1c8bzx97(v=vs.110).aspx

你可以做的另一件事,是通過你的收藏向後使用for聲明迭代。這樣,如果它是必須的,你將能夠刪除這些元素。你可以使用這個答案,看看如何向後遍歷:https://stackoverflow.com/a/1582317/637840

1

嘗試這種解決方案:

的Parallel.ForEach方法爲您提供了隊列中的每個項目的參數。在該方法中使用該參數進行打印。然後在完成時清除隊列。

public static void PrintingQueue(Queue<byte[]> printQueue, string printer, int copies) 
{ 
    Parallel.ForEach(printQueue, (currentFile) => 
    { 
     PrintWithGSPrint(currentFile, printer, copies); 
    }); 

    printQueue.Clear(); 
} 
相關問題