Visual Basic.NET: Erstellen eines Threads zum Aktualisieren der Benutzeroberfläche

Die übliche VB-Methode zur Bewältigung einer rechenintensiven Aufgabe besteht darin, sie in einen Worker-Hintergrundthread zu stellen, während der Hauptthread weiterhin die Benutzeroberfläche verwaltet.

Sagen Sie, aus welchem ​​Grund auch immer, dass ich dies andersherum tun musste: Der Hauptthread erledigt die Grunzarbeit und der Hintergrund aktualisiert die Benutzeroberfläche.

Folgendes habe ich bisher. Das einzige Problem besteht darin, dass das Benutzeroberflächenfenster (Form1) zwar neu gezeichnet wird, Sie jedoch nicht mit ihm interagieren, ihn nicht verschieben oder seine Größe ändern können (der Mauszeiger wird zur Sanduhr und klickt nicht).

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

Bearbeiten: Idealerweise muss ich dem Client eine solche Schnittstelle präsentieren

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

Der Client ruft dies folgendermaßen auf (tatsächlich in nicht verwaltetem C ++ über COM, aber Sie erhalten das Bild):

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

Antworten auf die Frage(3)

Ihre Antwort auf die Frage