我有一个项目,我通过使用许多线程生成数据并将其编号(1 - 500)并将其放置在Label中,然后放置在网格中,然后放入WrapPanel中。
问题。 线程中的一些数据先于其他数据完成。所以我的Wrap面板得到的数字就像 3 1 5 6 10 2 4 7 8 9.我想在所有螺纹完成后对经纱面板进行分类,使它们看起来像1 2 3 4 5 6 7 8 9 10
Private Sub StartSearch_MouseLeftButtonUp
Dim t As New Thread(AddressOf SearchBegin)
t.Start(Data)
End Sub
Sub SearchBegin(Data)
Dim Max = 10
Dim Count = 1
While Count < Max
Dim t As New Thread(AddressOf Check)
t.Start(Data)
count += 1
End While
End Sub
Sub Check(Data)
'things happen here
Dim display As New Action(Of Object)(AddressOf Progress)
WrapPanel1.Dispatcher.BeginInvoke(display, Data)
End Sub
Sub Progress(Data)
Dim g As New Grid
'Pretty Up Grid
Dim l As New Label
'Pretty Up Label
l.Content = Data.tostring
g.Children.Add(l)
WrapPanel1.Children.Add(g)
End Sub
答案 0 :(得分:1)
使用屏障。
等待所有线程完成,定义全局障碍:
Dim barr As New Threading.Barrier(1)
在开始主题之前添加参与者:
Sub startathread()
barr.AddParticipant()
Dim t As New Threading.Thread(AddressOf blabla)
t.Start()
End Sub
当工作完成后,表示已完成工作:
Sub blabla()
'do stuff
barr.SignalAndWait()
End Sub
现在该函数启动所有线程并等待所有线程完成:
Sub x()
For i = 0 To 9
startathread()
Next
barr.SignalAndWait()
'from this line on, all the threads are completed their jobs.
End Sub
要进行排序,您的主题必须将每个数据添加到列表中:
Dim datalist As New List(Of String)
Sub Progress(Data)
datalist.Add(Data.ToString)
End Sub
当添加所有数据时,必须调用一个排序和放置它们的函数:
Sub SortAndPlace()
datalist.Sort()
For Each sdata In datalist
Dim g As New Grid
'Pretty Up Grid
Dim l As New Label
'Pretty Up Label
l.Content = sdata
g.Children.Add(l)
WrapPanel1.Children.Add(g)
Next
End Sub