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