0

我有一个 For 循环,它列出了集合中的项目(比如每页 5 个项目)。用户可以通过单击其他页面按钮转到其他页面,但是如果当前页面仍在列出,则会导致以下错误。

Collection was modified. Enumeration operation may not execute.

当用户在列表完成之前单击其他页面按钮时,我将如何中止当前页面的列表?

我尝试创建两个布尔变量,分别称为“isListing”和“isSkipping”,然后尝试将 For 循环放入 While 语句中,如下所示:

Public Sub list()
    lines.Items.Clear()
    lines = New List(Of String)()
    Dim reader As StringReader = New StringReader(listLines) 'listLines obtained from a file
    Do Until reader.Peek = -1
        lines.Add(reader.ReadLine)
    Loop
    isListing = True

    While Not isSkipping AndAlso isListing
        For Each line As String In lines
            'List Page
        Next
        isListing = False
    End While
End Sub

页面按钮如下:

Private Sub btnPage_Click(...) ...
    If isListing Then isSkipping = True Else isSkipping = False
    list()
End Sub

但这会导致同样的错误。

任何帮助表示赞赏~!

4

1 回答 1

1

要中止正在进行的列表,您需要在 foreach 循环中放置一个命令来中止列表。您还可以将 foreach 循环更改为 for 循环,这将删除该异常,但可能会产生其他后果,例如空引用异常。将等待移动到按钮单击事件中也很有意义,您可以轻松地看到单击按钮时会发生什么。

可能有一种更强大的方法来处理这个问题,但是如果没有看到更多代码就很难说。

Private Sub btnPage_Click(...) ...
    While(isListing) 
        isSkipping = true 
        Thread.Sleep(100)
    End While
    isSkipping = false 
    list()
End Sub

Public Sub list()
    isListing = true
    For Each line As String In lines
        'List Page
        If isSkipping then 
            isListing = false
            return
        End If
    Next
    isListing = false
End Sub
于 2013-08-31T22:16:00.437 回答