Visual Basic.NET: cómo crear un hilo para actualizar la interfaz de usuario

La forma habitual de VB de manejar una tarea pesada computacionalmente es colocarla en un subproceso de trabajo en segundo plano, mientras que el subproceso principal sigue manejando la interfaz de usuario.

Decir por cualquier motivo que necesitaba hacer esto al revés: el hilo principal haciendo el trabajo duro y el de fondo actualizando la interfaz de usuario.

Esto es lo que tengo hasta ahora. El único problema es que, si bien la ventana de la interfaz de usuario (Form1) se vuelve a dibujar, no puede interactuar con ella, ni siquiera moverla ni cambiar su tamaño (el cursor del mouse se convierte en reloj de arena y no hace clic).

Public Class ProgressDisplay

Private trd As Thread

    Public Sub New()
        trd = New Thread(AddressOf threadtask)
        trd.Start()
    End Sub

    Private Sub threadtask()
        Dim f1 As Form1
        f1 = New Form1
        f1.Show()
        Do
            f1.Update()
            Thread.Sleep(100)
        Loop
    End Sub

End Class

Edit: Idealmente necesito presentar una interfaz como esta al cliente

Public Class ProgressDisplay
    Public Sub New()
    Public Sub Update(byval progress as int)
End Class

El cliente lo llamará así (en realidad en c ++ no administrado a través de COM, pero obtienes la imagen):

Dim prog = new ProgressDisplay()
DoLotsOfWork(addressof prog.update) ' DoLotsOfWork method takes a callback argument to keep client informed of progress

Respuestas a la pregunta(3)

Su respuesta a la pregunta