处理计算繁重任务的常用VB方法是将其放入后台工作线程中,而主线程则继续处理UI。Visual Basic.NET:如何创建线程来更新UI
说不管出于什么原因,我需要以相反的方式做到这一点:主线程做了咕噜的工作,更新了UI的背景。
这是我到目前为止。唯一的问题是,当UI窗口(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
麻烦是我的代码中没有完成很长时间的工作 - 它发生在这个类的客户端中。所以,我无法控制它发生的地方 - 它在主线程中。客户端需要做的是在开始时调用'SetupProgressIndicator'方法,并且不时地调用'IncrementProgressIndicator'方法。可以这样做吗? –
请详细描述情况。很难理解你的意思。 –
请参阅更新谢谢:) –