sto utilizzando il BacgroundWorker(BW) per eseguire una query molto pesante con un datareader


lo scenario è questo:
dichiaro il datareader(myReader) a livello di form

nell'evento DoWork del BW eseguo la query (tralascio il codice precedente per la valorizazione delle proprieta de BW e la chiamata all'esecuzione asincrona)
codice:
    Private Sub AsincTask_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)

        sql = "SELECT  molto pesante..."

	Dim comm As New OleDbCommand
        comm.Connection = connessione
        comm.CommandText = sql
        

        myReader = comm.ExecuteReader

    End Sub

la conclusione dell'operazione che mi veiene notificata attraverso l'evento RunWorkerCompleted nel quale

dovrei popolare una listbox con il risultato della query
codice:
Private Sub AsincTask_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)

        While myReader.Read()
            lstBatchDaImportare.Items.Add(myReader.Item(0).ToString)
        End While

        myReader.Close()
        MessageBox.Show("caricamento terminato")
    End Sub

ottengo questo errore:
System.Reflection.TargetInvocationException non è stata gestita
Message="Eccezione generata dalla destinazione di una chiamata."

nel punto all'interno del ciclo quando tento di popolare la listbox

per quello che ne so non si puo accedere ad elementi di un tread da
un'altro tread, ma il backgroundworker consente di farlo al temine dell'operazione asincrona
proprio nell'evento RunWorkerCompleted o sbaglio?
Naturalmente non utilizzando in BW e facendo eseguire tutto in sequenza il codice postato funziona regolarmente
come posso fare?