我在这里有一些代码,在下一个声明中,它给了我一个错误说:
此枚举器绑定的列表已被修改。只有在列表没有更改时才能使用枚举器。
我真的不知道如何进一步解释这个问题,但如果你需要我,我可以试试。
For Each itemChecked In storedAuthorsListbox.CheckedItems
Dim selectedAuthor As String = storedAuthorsListbox.SelectedItem.ToString()
Dim authorFile As String = "Authors\" & itemChecked.ToString()
Dim document As XmlReader = New XmlTextReader(authorFile)
metaInfo &= "[Author]" & vbNewLine
While (document.Read())
Dim type = document.NodeType
If (type = XmlNodeType.Element) Then
If (document.Name = "Name") Then
metaInfo &= "Name=" & document.ReadInnerXml.ToString() & vbNewLine
ElseIf (document.Name = "Website") Then
metaInfo &= "Website=" & document.ReadInnerXml.ToString() & vbNewLine
ElseIf (document.Name = "Notes") Then
metaInfo &= "Notes=" & document.ReadInnerXml.ToString() & vbNewLine
End If
End If
End While
document.Close()
Next
答案 0 :(得分:5)
某些代码在迭代时会改变storedAuthorsListbox。该代码在代码段中不可见。确保发布的代码没有在工作线程中运行,这是不合法的。它肯定像你在工人中运行的那种代码一样嘎嘎作响。
通用解决方案是制作项目的副本并从该副本而不是控件中工作:
Dim copy = storedAuthorsListBox.SelectedItems.OfType(Of String)().ToList()
For Each itemchecked In copy
'' etc..
Next
如果在工作线程中运行,则将副本传递给worker。