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