VB.NET按子数据排序WrapPanel

时间:2013-01-03 15:57:32

标签: vb.net sorting wrappanel

我有一个项目,我通过使用许多线程生成数据并将其编号(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

1 个答案:

答案 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