我有一个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
但这会导致同样的错误。
任何帮助表示赞赏〜!
答案 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