Ho provato a seguire il tuo consiglio nel seguente modo

1. Avvio BackGroundWorker nell'evento Click di Button1

2. BackGroundWorker esegue tutte le operazioni di analisi dei dati vedi esempio:
codice:
sub Do_Work

..recupero dati su database

'analisi dei dati non possibile con clausola where su query ma solo con più cicli
ciclo next

  ciclo next

    if condizione then

                                      Dispatcher.BeginInvoke(DispatcherPriority.Normal, New AggiornaPrenotazioni_Delegate(AddressOf Me.AggiornaCalendario), app, TestoAggiuntivo, NomeStruttura)


    end if

  end next

end next

end sub
ma viene sollevata un'eccezione
codice:
Il thread chiamante deve essere in modalità STA, perché questa è la modalità obbligatoria per molti componenti dell'interfaccia utente
ma il BackGroundWorker non può essere impostato su STA ma solo su MTA