En vb net tenés dos formas de hacer esto, una es con la clase Thread del Namespace System.Threading y la otra forma es con un BackgroundWorker.
Lo mas sencillo es utilizar el BW aunque si querés mas control sobre el subproceso lo mejor es usar la clase Thread.
Un ejemplo sencillo para mostrarte el uso de BW sería así.
Private Sub Button1_Click(
ByVal sender
As System.Object,
ByVal e
As System.EventArgs) _
Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End SubPrivate Sub BackgroundWorker1_DoWork(
ByVal sender
As System.Object,
ByVal e
As System.ComponentModel.DoWorkEventArgs) _
Handles BackgroundWorker1.DoWork
funcionRecursiva(parametro)
End SubPrivate Sub BackgroundWorker1_RunWorkerCompleted(
ByVal sender
As Object,
ByVal e
As System.ComponentModel.RunWorkerCompletedEventArgs) _
Handles BackgroundWorker1.RunWorkerCompleted
'algo para hacer cuando el subproceso termineEnd SubSi querés mas información sobre la clase Thread ve a:
msdn2.microsoft.com/en-us/library/system.threading.thread.aspx
Espero te sea útil