2013-09-22 5 views
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 
+0

어떻게 든이 목록은 루프 내부에서 변경되었습니다 :'storedAuthorsListbox.CheckedItems'. 어디서 그런 일이 일어날 지 알 수는 없지만 checkedItem을 다른 콜렉션에 복사하고 사용하면 도움이되는지 확인하십시오. – Neolisk

+0

나는 지금 내 쟁점을 깨달았고, 나는 선택의 여지가 없다. 나는 그것을 제거하고 잘 작동합니다. 내 어리 석음을 용서하십시오. – MrDuckBringer

답변

5

어딘가에 일부 코드는 storedAuthorsListbox을 변화하고 있습니다. 해당 코드는 스 니펫에 표시되지 않습니다. 게시 된 코드가 올바르지 않은 작업자 스레드에서 실행되고 있지 않은지 확인하십시오. 그것은 확실히 당신이 노동자에서 움직이는 코드와 같은 거꾸로됩니다.

일반적인 해결책은 대신 컨트롤의 복사본에서 항목과 작업의 복사본을 만드는 것입니다 : 이것은 작업자 스레드에서 실행되는 경우

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

다음 작업자에게 복사본을 전달합니다.

+0

나는 지금 내 쟁점을 깨닫는다. 나는 선택의 여지가 없다. 이 루프에서는 전혀 필요하지 않습니다. 또는 Sub에서. 나는 그것을 제거하고 잘 작동합니다. 내 어리 석음을 용서하십시오. – MrDuckBringer

+1

설명이 없어도 SelectedItem 속성을 사용합니다. getter는 CheckedItems 컬렉션을 수정하지 않습니다. 나는 점검했다, 그것은 잘 작동한다. 오 잘. –