2

我在这里有这段代码,在下一个语句中它给了我一个错误说:

此枚举器绑定到的列表已被修改。仅当列表不变时才能使用枚举器。

我真的不知道如何进一步解释这个问题,但如果你需要我可以尝试。

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
4

1 回答 1

5

某处的某些代码在您对其进行迭代时正在更改storedAuthorsListbox。该代码在代码段中不可见。请确保发布的代码没有在工作线程中运行,这是不合法的。它肯定会像你在工作人员中运行的那种代码一样嘎嘎作响。

通用解决方案是制作项目的副本并从该副本而不是控件工作:

    Dim copy = storedAuthorsListBox.SelectedItems.OfType(Of String)().ToList()
    For Each itemchecked In copy
        '' etc..
    Next

如果这在工作线程中运行,则将副本传递给工作人员。

于 2013-09-22T19:13:16.337 回答