Visual Basic.NET: cómo crear un hilo para actualizar la interfaz de usuario
La forma habitual de VB de manejar una tarea pesada computacionalmente es colocarla en un subproceso de trabajo en segundo plano, mientras que el subproceso principal sigue manejando la interfaz de usuario.
Decir por cualquier motivo que necesitaba hacer esto al revés: el hilo principal haciendo el trabajo duro y el de fondo actualizando la interfaz de usuario.
Esto es lo que tengo hasta ahora. El único problema es que, si bien la ventana de la interfaz de usuario (Form1) se vuelve a dibujar, no puede interactuar con ella, ni siquiera moverla ni cambiar su tamaño (el cursor del mouse se convierte en reloj de arena y no hace clic).
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 necesito presentar una interfaz como esta al cliente
Public Class ProgressDisplay
Public Sub New()
Public Sub Update(byval progress as int)
End Class
El cliente lo llamará así (en realidad en c ++ no administrado a través de COM, pero obtienes la imagen):
Dim prog = new ProgressDisplay()
DoLotsOfWork(addressof prog.update) ' DoLotsOfWork method takes a callback argument to keep client informed of progress