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