Multithreading mit mehreren Argumenten

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von thefiloe.

    Multithreading mit mehreren Argumenten

    Hallo,

    ich möchte gerne einen neuen Thread erstellen, welcher mit zwei Argumenten aufgerufen werden muss. Beispiel:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. Dim t As New Threading.Thread(AddressOf TestThread)
    3. t.Start("Hans", 30)
    4. End Sub
    5. Private Sub TestThread(name As String, age As Integer)
    6. End Sub


    Leider bekomme ich einen Überladungsfehler, aber warum? Mit einem Argument funktioniert es doch auch ...?
    MFG VBWorld
    Mathe ist für alle die, die nicht mit dem Taschenrechner umgehen können :D
    Hi,

    AddressOf ruft nur den Delegaten auf, du kannst nichts weiteres angeben...
    Mach es doch so:

    VB.NET-Quellcode

    1. Dim t = New Thread(Sub() Me.TestThread("name", 1))


    Du kannst also hierbei mit Actions auch arbeiten.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    die älteren Threading-Konzepte sind ziemlich vermurst. Zb konnten typisierte Argumente nicht an den NebenThread übergeben werden - nur 1 Object.
    Damals gelöst habe ich das mit AsyncWorker - CodeProject

    Heutzutage kannman auch was reissen mittm Async-Feature - aber näheres nicht von mir, weil ich nur 2010.
    oder mit einer Struktur, einer list of Object etc.. schau mal hier, da habe ich das mal erklärt [VB 2008] Fragen zu Multithreading
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Das ist untypisierter Quak, du stopfst alle möglichen Datentypen in die List...
    Zudem ist das mehr Aufwand.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Was redest du da?
    [VB 2010] Multithreading mit mehreren Argumenten
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Super link der führt mich wieder hier her, du wolltest bestimmt einen anderen. Man kann es so machen, mit einer Klasse, einer Struktur etc.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    lol, der war Sinn ja auch in diesem Thema auf Post #2 zu verweisen. ;)
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Dann erklär mir, warum das besser ist. Ich hab schon einen Nachteil.
    Gegen ne Struktur so habe ich nichts, nur gegen ne List(Of Object). Nur ist's halt mehr Code, @Andy16823:.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    ich verweise nochma auf post#3, weil Threading erfordert üblicherweise auch, dass bestimmte Buttons so lange disabled sind, und dass man canceln kann, oder die Anwendung auch ganz schließen, und sowas.
    Da denkt man anfangs nicht gleich dran, aber letztendlich abliefern kann man nicht, ohne dass das implementiert ist.

    RushDen schrieb:

    Du kannst auch ne Struktur erstellen

    Andy16823 schrieb:

    Man kann es so machen, mit einer Klasse, einer Struktur etc.

    Andy16823 schrieb:

    und die einzige möglichkeit mit der es geht

    Andy16823 schrieb:

    einer list of Object etc..
    Wenn man keine Ahnung hat ...


    Die korrekte Lösung wurde schon längst gepostet. Es gibt anonyme Delegate bzw. Lambdaausdrücke etc. welche das alles sooo leicht ermöglichen. Der erste Post von Trade ist garantiert eine gute Lösung ohne viel Schickschnack. Außerdem, bevor ich anfange für jeden Thread-Start eine neue Struktur anzulegen, verwende ich noch vorher dynamische Objekte. Ist hier jedoch auch kompletter bullshit, da sowas eigentlich nahezu ausschließlich bei Linq und nen paar Bibliotheken (z.B. bei JSON-Libs) verwendet wird.

    Aber nochmal zum eigentlichen Problem: Bist du dir sicher, dass du einen Thread brauchst? Man kommt von dem ganzen Konzept neue Threads zu erstellen eigentlich immer weiter weg sondern überlässt das verwenden des ThreadPools oder das neue Starten von Threads dem .net framework. Es gibt für verschiedene async Situationen verschiedene "fertige" Lösungen:
    • Parallel.For/ForEach für Verarbeitung von großen und performanceintensiven Datenmengen.
    • Delegate.BeginInvoke um eine Delegat kurz und schmerzlos über den ThreadPool aufzurufen.
    • Tasks um das ganze Konzept von Threads so oder so komplett abstrahieren zu können. Sind eigentlich die Zukunft von Threading im .NET Framework. Mit .NET 4.5 kannst du diese mit den async und await Schlüsselwörter verwenden, welche dir automatisch Tasks generieren welche durch die ContinueWith-Methode des Tasks eine optimale Verwendung ermöglichen. Du kannst hier ganz normalen Code schreiben und musst nur ein kleines Wörtchen davorsetzen und schon läuft das in nem extra Thread, ohne, dass du viel am Code ändern musst.
    • ... Gibt wesentlich mehr, aber will hier kein Tutorial schreiben.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.