Vb.net BackgroundWorker,是否需要代理调用?

Vb.net BackgroundWorker,是否需要代理调用?,vb.net,listview,delegates,Vb.net,Listview,Delegates,我一直在使用backgroundWorker和一个代理向listview添加listview项。我的代码将图像下载到imagelist,然后尝试将图像添加到listview。已添加第一个图像,但如果没有交叉线程错误,则无法将imagelist中的任何其他图像添加到listview。我不明白为什么第一个图像可以工作,但其他的都不行。通过在这个网站上查看这个主题,我意识到我必须使用InvokeRequired。我做错什么了吗?这是我的密码 Dim strPhotoLink As St

我一直在使用backgroundWorker和一个代理向listview添加listview项。我的代码将图像下载到imagelist,然后尝试将图像添加到listview。已添加第一个图像,但如果没有交叉线程错误,则无法将imagelist中的任何其他图像添加到listview。我不明白为什么第一个图像可以工作,但其他的都不行。通过在这个网站上查看这个主题,我意识到我必须使用InvokeRequired。我做错什么了吗?这是我的密码

        Dim strPhotoLink As String = strPostContent.Substring(intPhotoLinkStartIndex + 35, ((intPhotoLinkEndIndex - intPhotoLinkStartIndex) - 29))
        lstPhotoLinks.Add(strPhotoLink)
        Try
            ImageListPhotos.Images.Add(Bitmap.FromStream(System.Net.HttpWebRequest.Create(strPhotoLink).GetResponse.GetResponseStream))

            Dim lvi As New ListViewItem("", ImageListPhotos.Images.Count - 1)
            Dim delAddListViewPhotoItem As DelegateAddListViewPhotoItem = New DelegateAddListViewPhotoItem(AddressOf AddListViewPhotoItem)
            delAddListViewPhotoItem.Invoke(lvi)
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try

Private Delegate Sub DelegateAddListViewPhotoItem(item As ListViewItem)
Private Sub AddListViewPhotoItem(item As ListViewItem)
    If ListViewPhotos.InvokeRequired = True Then
        Dim del As New DelegateAddListViewPhotoItem(AddressOf AddListViewPhotoItem)
        ListViewPhotos.Invoke(del, item)
    Else
        ListViewPhotos.Items.Add(item)
    End If
End Sub

第一段代码在哪里?如前所述,您可能正在一个线程上创建LVI,然后尝试将其添加到另一个线程中。我看不出哪里涉及到图像或图像列表(或者BGW),代码的第一部分在backgroundworker中运行。然后它调用委托添加listview项。我在错误的位置创建listview项?
代码在backgroundworker中运行
这是否意味着
DoWork()
方法?是的,是“do work”方法。BGW的要点是在UI线程(创建它们的线程)以外的线程上执行一些耗时的任务。只能在UI线程上修改控件。因此,您的代码在ThreadA(例如)上创建LVI,然后尝试通过委托将其添加到UI线程上的LVI