Variable erstellen mit count-Zusatz

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von SpaceyX.

    Variable erstellen mit count-Zusatz

    Huhu
    Ist es möglich in einer for-Schleife die Variable abc zu erstellen nur immer mit Variable i als Suffix? Sodass dann abc1, abc2 etc. deklariert werden? Mit Dim abc & i ... scheints nicht zu gehen :/

    LG,
    Chucky109
    Ich habe eine Listbox mit sagen wir 5 Einträgen.
    Nun will ich über eine for-Schleife die von i=0 bis Listbox1.Items.Count zählt für jeden Eintrag einen Thread erstellen, der auf die gleiche Funktion zurückgreift nur mit den jeweiligen Werten aus der Listboxzeile. (Ich hoffe man kann das nachvollziehen :o) Und darum dachte ich mir, für Item 1 wird der Thread dann threadBlabla1 usw., den gleichen Thread mehrmals starten geht ja parallel nicht, oder? Gibts da vlt. noch ne leichtere Variante und ich hab nur nen Denkfehler?

    Also nochmal zusammengefasst: Listbox, für jedes Item muss die Funktion ausgeführt werden, am besten alles parallel^^
    Ich versteh schon, was Du machen willst, jedoch versteh ich nicht ganz, wie Du auf so eine Idee kommst.

    Hier gibt es viele Lösungsansätze, ich poste Dir meinen Vorschlag.

    Gehe in einer Schleife jedes ListboxItem durch. Erzeuge in der Schleife jeweils einen neuen Thread und übergib dem Thread den Wert des ListboxItems.

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    2. For i As Integer = 0 To Me.ListBox1.Items.Count - 1
    3. Dim tS As New System.Threading.ParameterizedThreadStart(AddressOf DoSomethingWithTheListboxValue)
    4. Dim t As New Threading.Thread(tS)
    5. t.Start(Me.ListBox1.Items(i).ToString())
    6. Next
    7. End Sub
    8. Private Sub DoSomethingWithTheListboxValue(ByVal o As Object)
    9. Dim s As String = DirectCast(o, String)
    10. MessageBox.Show(s)
    11. End Sub


    Wenn Du Dir in der DoSomething....-Sub jeweils die ThreadID ausgeben lässt, wirst Du sehen, dass es jedesmal ein neuer Thread ist.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    Quellcode

    1. Die Signatur der Private Sub xx(xxx As Object, xxxx As Object)-Methode ist mit dem Delegaten "Delegate Sub ParameterizedThreadStart(obj As Object)" nicht kompatibel.


    Habe es genauso wie du benutzt, nur halt auf meinen Code angepasst und bekomme diese Fehlermeldung.
    Du kannst genau ein Object als Parameter übergeben, so wie es die Fehlermeldung sagt. Ein Object kann alles sein. Wie gesagt, war ein Vorschlag.

    Gibt jetzt 2 Möglichkeiten. Entweder, Du kapselst Deine Daten, die Du verarbeiten willst, in einer Structure oder einer Klasse und übergibst die als Parameter oder Du nutzt ein anderes Modell...

    So z. B.

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    2. For i As Integer = 0 To Me.ListBox1.Items.Count - 1
    3. Dim a As Action(Of String, Integer)
    4. a = AddressOf DoSomethingWithTheListboxValue
    5. a.BeginInvoke(Me.ListBox1.Items(i).ToString(), i, Nothing, Nothing)
    6. Next
    7. End Sub
    8. Private Sub DoSomethingWithTheListboxValue(ByVal s As String, ByVal i As Integer)
    9. MessageBox.Show(Threading.Thread.CurrentThread.ManagedThreadId.ToString())
    10. End Sub
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o