前面示例中的方法调用不能包含任何参数或返回值。这一限制是使用此方法创建和运行线程的主要缺点之一。然而,可以通过将在单独的线程中运行的过程包装到类或结构中,为它们提供参数,并使之能返回参数。
<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>Class TasksClass
Friend StrArg As String
Friend RetVal As Boolean
Sub SomeTask()
' 将 StrArg 字段用作参数。
MsgBox("StrArg 包含字符串" & StrArg)
RetVal = True ' 设置返回参数的返回值。
End Sub
End Class
' 要使用类,请设置存储参数的属性或字段,
' 然后,根据需要异步调用方法。
Sub DoWork()
Dim Tasks As New TasksClass()
Dim Thread1 As New System.Threading.Thread( _
AddressOf Tasks.SomeTask)
Tasks.StrArg = "某个参数" ' 设置用作参数的字段。
Thread1.Start() ' 启动新线程。
Thread1.Join() ' 等待线程 1 运行结束。
' 显示返回值。
MsgBox("线程 1 返回值" & Tasks.RetVal)
End Sub
手动创建和管理线程最适合需要控制细节(例如线程优先级和线程模型)的应用程序。可以想象,使用这种方法管理大量线程将是非常困难的。如果需要很多线程,可以考虑使用线程池以降低复杂程度。