Visual Basic.NET: jak utworzyć wątek do aktualizacji interfejsu użytkownika

Zwykłym sposobem VB na radzenie sobie z trudnym obliczeniowo zadaniem jest umieszczenie go w wątku roboczym w tle, podczas gdy wątek główny nadal obsługuje interfejs użytkownika.

Powiedz z jakiegokolwiek powodu, że musiałem to zrobić na odwrót: główny wątek wykonuje gruntowne prace, a drugi aktualizuje interfejs użytkownika.

Oto, co mam do tej pory. Jedynym problemem jest to, że podczas gdy okno interfejsu użytkownika (Form1) jest przerysowywane, nie można z nim wchodzić w interakcje, nawet nie przesuwać ani zmieniać jego rozmiaru (kursor myszy zmienia się w klepsydrę i nie kliknie).

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

Edytuj: Idealnie muszę przedstawić klientowi taki interfejs

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

Klient wywoła to w ten sposób (właściwie w niezarządzanym c ++ przez COM, ale otrzymasz zdjęcie):

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

questionAnswers(3)

yourAnswerToTheQuestion