【发布时间】:2013-05-10 15:12:17
【问题描述】:
我想删除不包含“mysite”的列表框的所有项目,这是我的代码在没有 backgroundworker 的情况下也能正常工作。
做工作事件:
Dim relevantSite As Integer = 0
Do Until relevantSite = lstLinks.Items.Count
If lstLinks.Items.Item(relevantSite).ToString.Contains("mysite") Then
relevantSite += 1
Else
bgWorker.ReportProgress(relevantSite)
End If
Loop
ProgressChanged 事件:
lstLinks.Items.RemoveAt(CInt(e.ProgressPercentage))
它的作用是删除很多项目,有时是所有项目。我知道我在 e 和 reportProgress 上犯了一些可怕的错误。
请给我解释一下,我搜索了各种网站但无法理解...
【问题讨论】:
-
您的项目中有多少包含字符串“mysite”。如果有很多,那么您的代码工作正常。请指教。还要注意 ReportProgress 的第一个参数是操作进度的指示。第二个参数 UserState 是您应该用来传递索引的值。
-
你为什么使用后台工作者?我看不到它在这里增加了任何价值,因为进度更改事件比 DoWork 重得多。您没有显示其中是否有其他处理?你不能只过滤初始加载中的网站吗?
-
您希望 ProgressChanged 事件处理程序在您调用 ReportProgress 时运行。它没有,它稍后运行。确实完全搞砸了列表视图。不要为这样的代码使用工作人员。
-
看,汉斯也同意我的观点。
标签: vb.net visual-studio-2010 backgroundworker