Visual Basic.NET: como criar um segmento para atualizar a interface do usuário

A maneira usual do VB de lidar com uma tarefa computacionalmente pesada é colocá-lo em um thread de trabalho em segundo plano, enquanto o thread principal mantém o tratamento da UI.

Diga por qualquer motivo que eu precisei fazer o contrário: o thread principal fazendo o trabalho pesado e o background atualizando a UI.

Aqui está o que eu tenho até agora. O único problema é que, enquanto a janela da interface do usuário (Form1) é redesenhada, você não pode interagir com ela, nem mesmo movê-la ou redimensioná-la (o cursor do mouse vira para a ampulheta e não clica).

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 eu preciso apresentar uma interface como esta para o cliente

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

O cliente irá chamá-lo assim (na verdade, em c ++ não gerenciado sobre COM, mas você obtém a imagem):

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

questionAnswers(3)

yourAnswerToTheQuestion