我有一个必须作为参数传递给线程的结构列表;列表中的每个元素一个。线程将循环直到结构中的布尔值变为真。
所以我做了:
For Each ScaleElement In Scales
Dim NewThread As New System.Threading.Thread(Sub() ScaleThread(ScaleElement))
NewThread.Start()
Next
使用 ScaleElement 通过引用。但是,我有一个警告:“在 lambda 表达式中使用迭代变量可能会产生意想不到的结果”。警告是正确的,因为它似乎在同一个元素上运行线程。
如果我尝试:
For Each ScaleElement In Scales
Dim NewScale = ScaleElement
Dim NewThread As New System.Threading.Thread(Sub() ScaleThread(NewScale))
NewThread.Start()
Next
它工作正常,但由于“NewScale”是一个不同的元素,当我尝试设置打破列表元素中循环的条件时,它当然不起作用。
规模结构:
Public Structure ScaleStruct
Dim Key As String
Public Scale
Dim Database As String
Dim Table As String
Dim Field As String
Dim Keyname As String
Dim Interval As Integer
Dim Insert As Boolean
Dim Format As String
Public Abort As Boolean
Dim FailCount As Integer
End Structure
scale 变量被设置(在配置文件读取)到读取比例的类。
Scales 是一个“Public Scales As New List(Of ScaleStruct)”,因此,当我想停止线程时,我想在结构中使用布尔值(Abort)。
然后,线程是一个循环:
Private Sub ScaleThread(ByRef Tscale As ScaleStruct)
Do Until Tscale.Abort
...
Loop
End Sub
我该如何解决这个问题?