更改集合时退出循环?

时间:2013-08-31 21:39:15

标签: vb.net loops pagination enumeration

我有一个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

但这会导致同样的错误。

任何帮助表示赞赏〜!

1 个答案:

答案 0 :(得分: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