所以基本上我希望我的应用程序运行一个 CPU 密集型方法,同时它应该不断地在不同的表单上显示状态信息。为了防止这种状态表单冻结,我认为将代码外包到一个新线程是一个好主意。
首先,我尝试使用基本线程并调用应该显示状态消息的richtextbox 控件。- 问题是 - 我需要知道线程何时完成才能继续我的主线程。显然,我不能简单地在我的主线程中运行一个循环来不断检查进程是否完成,因为这也会使我的 GUI 冻结。
所以我做了一些研究,发现了关于Tasks的信息。这就是它的外观:
Dim z as new complexProcessClass
Dim taskA = task.Factory.StartNew(Sub() z.start())
taskA.Wait()
If taskA.IsCompleted Then
MsgBox("finished")
End If
每当进程报告状态时,我都会使用它:
Public Class complexProcessClass
dim statusWindow as statusForm
Public Sub start()
statusWindow = new statusForm
'complex code here
reportStatus("bla")
'complex code here
reportStatus("blabla")
'complex code here
End Sub
Private Delegate Sub UpdateTextHandler(ByVal Text As String)
Private Sub reportStatus(Byval s as String)
If z.RichTextBox1.InvokeRequired Then
Try
z.RichTextBox1.Invoke(New UpdateTextHandler(AddressOf xform.RichTextBox1.AppendText), s)
Catch ex As Exception
MsgBox(ex.ToString())
End Try
Else
z.RichTextBox1.AppendText(s)
End If
End Sub
但它只是在调用调用时一直冻结 - 没有错误消息 - 什么都没有?!
谁能告诉我这样做的正确方法?- 请不要使用背景工作者解决方案;)
提前致谢