Visual Basic.NET: как создать поток для обновления пользовательского интерфейса
Обычный VB-способ обработки сложной вычислительной задачи - поместить ее в фоновый рабочий поток, в то время как основной поток продолжает обрабатывать пользовательский интерфейс.
Скажем, по какой-то причине мне нужно было сделать это наоборот: основной поток выполняет основную работу, а фоновый - обновление пользовательского интерфейса.
Вот что я имею до сих пор. Единственная проблема заключается в том, что, хотя окно пользовательского интерфейса (Form1) действительно перерисовывается, вы не можете с ним взаимодействовать, даже не перемещать и не изменять его размер (курсор мыши превращается в песочные часы и не щелкает мышью).
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
Изменить: в идеале мне нужно представить клиенту такой интерфейс
Public Class ProgressDisplay
Public Sub New()
Public Sub Update(byval progress as int)
End Class
Клиент будет называть это так (на самом деле в неуправляемом C ++ через COM, но вы получите картину):
Dim prog = new ProgressDisplay()
DoLotsOfWork(addressof prog.update) ' DoLotsOfWork method takes a callback argument to keep client informed of progress