2017-01-14 8 views
-1

Ich benutze VB.net, um einige Gleichungen zu lösen, indem man sie interagiert. Es dauert eine lange Zeit mit einem Thread, so dass ich hoffe, jemand kann mir helfen Multithread den Code. Hier ist ein über vereinfachtes Beispiel dessen, was ich erreichen möchte.Multithreading für Schleifen in 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 

End Class

Ich muss den Haupt-Thread zu Daten aus der Vergangenheit zurück, so kann ich die Ergebnisse von jedem Thread gegeneinander vergleichen. Ich habe eine Klasse für die Daten erstellt, die ich aus der Funktion zurückholen muss.

Die in jeder for-Schleife verbrachte Zeit kann unterschiedlich lang sein.

+1

Überprüfen Sie [Parallel.For] (https://msdn.microsoft.com/en-us/library/dd460713 (v = vs.110) .aspx) –

Antwort

0

Sie könnten sie parallel laufen lassen, mit einer Parallel For Loop, müssen nur darauf achten, dass die Reihenfolge der Dinge ausgeführt werden, ist nicht wichtig. Diese Schleife garantiert nur, dass jedes Element in der Iteration wird durchgeführt werden, werden sie nicht in jeder Art von bestimmten Reihenfolge geschehen ...

Um dies mit Ihrem Code zu implementieren, würden Sie müssen einfach nur die folgende Änderung vornehmen:

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