Array an Backgroundworker übergeben

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von FAtheone.

    Array an Backgroundworker übergeben

    Hallo @ all

    Wie kann ich beim Aufruf eines Backgroundworker ein Array übergeben und wie speichere ich es in der Sub? Also übergeben geht glaube so oder:

    VB.NET-Quellcode

    1. BackgroundWorker1.RunWorkerAsync(Array)


    Aber wie kann ich es dann in der neuen Sub nutzen? Ich muss es ja erst in einer neuen Variable speichern oder?

    Viele Grüße
    Croasider
    also z.B: so?

    VB.NET-Quellcode

    1. Dim Array As String = DirectCast(e.Argument, String)


    Und wie geht das wenn ich z.B: 2 Arrays übergeben will? Woher weiß ich welches er in welchem Speichert?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Croasider“ ()

    Croasider schrieb:

    2 Arrays übergeben will?

    Dann nimmst du entweder eine Klasse/Structure die das kapselt oder du machst es direkt dynamisch:

    VB.NET-Quellcode

    1. Dim b() As Integer
    2. Dim bgw As New System.ComponentModel.BackgroundWorker
    3. bgw.RunWorkerAsync(New Object() {1, "A", b})

    Ist allerdings eher unschön und undurchsichtig ;)
    Mach es doch so:

    VB.NET-Quellcode

    1. Dim args As New Dictionary (Of String, Object)
    2. args.Add("TestINT",123)
    3. args.Add("TestStr","Haha")
    4. bgw.RunWorkerAsync(args)
    5. 'BGW klassenweit als withevents deklarieren und AddHandler bgw.DoWork, AddressOf BGW
    6. 'Im BGW:
    7. dim a as dictionary(of string, object) = directcast(e.argument, dictionary(of string, object)
    8. msgbox(a.item("TestINT")) '123

    YaPh1l schrieb:

    Compiler fängt Fehler wie "Teststr" nicht ab.

    Der compiler schon mal gar nicht...
    Der Debugger insofern, dass man auch in einem Dictionary mit Keys.Contains() überprüfen kann, ob der Key existiert.
    List Of ginge auch, wird aber bei vielen Werten unübersichtlich, da man sich Index-Werte-Paare merken muss, statt String-Werte-Paare