Quote Originariamente inviata da Veronica80 Visualizza il messaggio
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).
Per comunicare il progresso al worker, devi in qualche modo passare un riferimento al BackgroundWorker nella chiamata della tua funzione ricorsiva, aggiungendo un parametro di questo tipo, affinché la chiamata passi (opzionalmente) il valore anche alle chiamate ricorsive e in modo che la chiamata di primo livello ed eventualmente anche le seguenti possano accedere all'oggetto e comunicare in qualche modo il loro progresso, tenendo presente che ciascuna chiamata ha la visibilità del livello di ricorsività a cui è giunto (in breve, conosce solo il punto del lavoro in cui è arrivata per ciò che le compete), a meno di non passare alla funzione ricorsivamente anche altri parametri che permettano di avere un quadro complessivo del lavoro e di restituire così un "progresso" reale.

Sintentizzando in due parole, la tua funzione ricorsiva deve essere "worker friendly": se vuoi visualizzare un progresso dell'elaborazione, la funzione deve consentire di passare un parametro (che può essere il BackgroundWorker, o anche una interface più generica fatta da te) affinché essa possa comunicare informazioni sull'avanzamento dei lavori; in caso contrario, la tua chiamata alla funzione è "atomica" e a nulla serve sapere che si tratta di una funzione ricorsiva: il risultato finale lo otterrai all'uscita della prima chiamata.

Ciao!