我有一個小應用程序,使用BackgroundWorker隨時處理IEnumerator<T> list
。如何在迭代(C#)時將ListItem添加到列表中?
的代碼基本上是這樣的:
while(true){
foreach(T item in list){
// Process each item and send process
// Add an object in child List (List<T1> item.Result)
}
Thread.Sleep(500);
}
現在我有一個按鈕和一個文本框,這將直接添加到的IEnumerator。
問題是,我添加按鈕後,後臺工作人員繼續處理它正在處理項目,但會在完成該項目後停止。它不會繼續。
如何安全地將項目添加到列表中而不影響背景工作?除了後臺工作人員也會添加對象到項目。這應該是什麼解決方案?
謝謝
是的,但我不修改枚舉器。我正在編輯的是該項目。結果。這不會影響itemList。如果我複製這個。 item.Result不會被修改。 – DucDigital
@Duc - 列表的副本將包含與原始對象相同的對象的引用,所以如果修改副本中的對象,則會修改原始副本(假設T不是值類型)。您詢問了在迭代過程中添加到列表中的情況,這會修改枚舉數的底層集合並使其無效,導致它在下一步移除異常。 – tvanfosson
這個工作很好。謝謝你tvanfosson – DucDigital