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

Ответы на вопрос(3)

Ваш ответ на вопрос