Ciao Alka!
Ti riporto un po di codice così da spiegarmi meglio (tenendo conto che possa aver sbagliato tutto però ).


Questa è una normale funzione ricorsiva che userei per scansionare le cartelle/sottocartelle:

codice:
   Private Sub ricorsione(ByVal _myFld As IO.DirectoryInfo)
        For Each subF As IO.DirectoryInfo In _myFld.GetDirectories
            ricorsione(subF)
        Next
        For Each f As IO.FileInfo In _myFld.GetFiles
           'agisco e manipolo i miei files
        Next

    End Sub
richiamando la funzione e passando come argomento l'oggetto directoryInfo iniziale scansiona tutti file nelle sottocartelle.

Io ho provato a richiamare tale funzione nel doWork del BGW:

codice:
Private Sub myBGW_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles myBGW.DoWork
        If myBGW.CancellationPending Then
            e.Cancel = True
        Else
            ricorsione(New IO.DirectoryInfo("C:\MiaCartella"))
        End If
End Sub
E per iniziare il processo chiamo uno start asincrono del BGW:

codice:
myBGW.RunWorkerAsync()
Ora...così il codice viene eseguito ma non riesco a passare il "progresso" del lavoro all'evento ProgressChanged non avendo spazio di manovra sulla funzione (come farei se il loop fosse inserito nel DoWork stesso).

Di conseguenza non riesco ad avere il risultato che voglio (ovvero in fase di scanning avere l'aggiornamento in una label o txtbox).

Non so se sono stata chiara sul problema...ho sempre problemi a spiegarmi