从列表框中选择所有项目,仅将它们全部通过BackgroundWorker添加到Listview中一次

问题描述 投票:0回答:1

我最近在从列表框中选择ALL个项目(一次ONLY!)并将它们添加到列表视图中时遇到了一些问题。由于列表视图将包含big内容,并且执行该任务时avoid GUI冻结,因此我正在使用backgroundworker来处理此任务。

好,所以这是BackgroundWorker_ProgressChanged代码:

  For Each item In ListBox3.SelectedItems

    listView1.Items.Add(ListBox3.SelectedItem, ImageList1.Images.Count - 1).SubItems.Add("Test")
      ListView1.Items("Test").SubItems.Add("")
       Next
      For Each item As ListViewItem In ListView1.SelectedItems

      Next
     End Sub

上面编写的代码在列表视图中显示项目,但是ONLY如果用户从Listbox3中选择某个项目并显示无限次从列表框中选择的项目,我希望它显示ONCE ONCE all列表视图中列表框中的项目。我想自动选择ALL项目,而无需用户干预,我尝试了几种失败的方法。有人可以为这个问题提供解决方案吗?谢谢。

vb.net listview listbox backgroundworker
1个回答
0
投票

我刚刚进行了测试,看来从辅助线程上从ListBox获取项目不是问题,所以我对此表示错误。虽然肯定会添加/设置项目,所以您需要将这些项目添加到UI线程上的ListView。这是一些对我有用的示例代码:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    Dim outputItems As New List(Of ListViewItem)

    For Each inputItem As String In ListBox1.Items
        outputItems.Add(New ListViewItem(inputItem))
    Next

    e.Result = outputItems
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    Dim items = DirectCast(e.Result, List(Of ListViewItem))

    ListView1.Items.AddRange(items.ToArray())
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.