devo eseguire una query molto pesante attraverso un command che restituisce un datareader
quando viene invocato il metodo ".ExecuteReader" l'applicazione chiaramente rimane bloccata in attesa di restituire i dati

ho provato a mettere Application.DoEvents() per cercare di ottenere il controllo sull'applicazione metre esegue l'operazione in corso ma rimane tutto bloccato
ho provato anche a mettere il codice in una funzione che poi ho chiamato tramite un delegate ma l'effetto è lo stesso(applicazione bloccata fino al termine del operazione di lettura)

devo l'anciare il codice in un'altro tread?? come faccio poi a sapere quando l'operazione è terminata? mi viene notificato un evento? posso poi interrompere l'operazione quando è ancora in corso?



codice:
Dim dr As OleDbDataReader
Dim comm As New OleDbCommand
comm.Connection = connessione  
comm.CommandText = sql
Application.DoEvents()
dr = comm.ExecuteReader