Hi all
I am trying to update a listview from my backgroundworker. On the ProgressChanged event, I am passing back ProgressPercentage and a custom object called OperationInfo in the UserState object.
OperationInfo has 4 properties: Operation(string), Success(boolean), Count(int), and AdditionalMessage(string)
The below code updates my progress bar, checks if the content of Operation is equal to the last Operation message that was passed to the listview. If so, update the other 3 properties in the listview. If not, add a new item to the listview using the values of OperationInfo.
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
    tsPB.Value = e.ProgressPercentage
    Dim lvwitem As New ListViewItem
    If e.UserState IsNot Nothing Then
        Dim i As OperationInfo = DirectCast(e.UserState, OperationInfo)
        If lvwMessages.Items.Count > 0 AndAlso lvwMessages.Items(lvwMessages.Items.Count - 1).Text = i.Operation Then
            lvwMessages.BeginUpdate()
            lvwMessages.Items(lvwMessages.Items.Count - 1).SubItems(1).Text = i.Success
            lvwMessages.Items(lvwMessages.Items.Count - 1).SubItems(2).Text = e.ProgressPercentage
            lvwMessages.Items(lvwMessages.Items.Count - 1).SubItems(3).Text = i.AdditionalMsg
            lvwMessages.EndUpdate()
        Else
            lvwitem = New ListViewItem
            lvwitem.Text = i.Operation
            lvwitem.SubItems.Add(i.Success)
            lvwitem.SubItems.Add(i.Count)
            lvwitem.SubItems.Add(i.AdditionalMsg)
            lvwMessages.BeginUpdate()
            lvwMessages.Items.Add(lvwitem)
            lvwMessages.EndUpdate()
        End If
    End If
End Sub
The problem is that the listview doesn't update until the process is complete. What I want is for the Count column in the listview to be incrementing at the same time as the ProgressBar is incrementing, not updated with the final result at the end of the process. All of the data is coming through at the right times, it just seems like a threading problem whereby the Progress Bar on the UI thread is repainting, but the ListView which is presumably on the same thread is not.