vb.net中的循环多线程

时间:2017-01-14 18:31:20

标签: vb.net multithreading for-loop

我使用VB.net通过对它们进行交互来帮助解决一些方程式。使用一个线程需要很长时间,所以我希望有人可以帮我多线程代码。这是我想要实现的简化示例。

Public Class Form1

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    Dim Evens(6) As Integer
    Dim Odds(6) As Integer

    For i = 0 To 6
        Evens(i) = i * 2
        Odds(i) = i * 2 + 1
    Next

    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    Evens = RunLoop(Evens, 0, 6)    'The best way to Multi thread this part please.
    Odds = RunLoop(Odds, 0, 6)
    ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    For i = 0 To 6
        TextBox1.AppendText(Evens(i) & vbNewLine)
        TextBox1.AppendText(Odds(i) & vbNewLine)
    Next


End Sub

Private Function RunLoop(Numbers() As Integer, Start As Integer, Last As Integer)

    For i = Start To Last
        Numbers(i) *= Numbers(i)
    Next

    Return Numbers

End Function

结束班

我需要将数据传递回主线程,因此我可以将每个线程的结果相互比较。我已经从函数中创建了一个我需要过去的数据类。

每个for循环的花费时间可以不同。

1 个答案:

答案 0 :(得分:0)

您可以使用Parallel For Loop并行运行它们,只需要注意订单执行顺序并不重要。这个循环只保证迭代中的每个项都会完成,它们不会以任何特定的顺序发生......

要使用您的代码实现该功能,您只需进行以下更改:

Private Function RunLoop(Numbers() As Integer, Start As Integer, Last As Integer)

    'For i = Start To Last
    '    Numbers(i) *= Numbers(i)
    'Next

    'Run every iteration in the loop in parallel:
    Parallel.For(Start, Last + 1, Sub(i) Numbers(i) *= Numbers(i))

    Return Numbers

End Function