Threads und Invoke

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Threads und Invoke

    Hallo,

    vestehe ich das richtig?

    Nebenthread führt die Methode TestInvoke aus. Me ist das HauptForm, also wird in den Hauptthread invoked:

    VB.NET-Quellcode

    1. Private Sub TestInvoke
    2. MachWasNeben()
    3. BeginInvoke(Sub() MachWasHaupt())
    4. End Sub
    TestInvoke() kann returnen bevor MachWasHaupt() returnt

    VB.NET-Quellcode

    1. Private Sub TestInvoke
    2. MachWasNeben()
    3. Invoke(Sub() MachWasHaupt())
    4. End Sub
    TestInvoke() kann erst nach MachWasHaupt() returnen

    VB.NET-Quellcode

    1. Private Sub TestInvoke
    2. MachWasNeben()
    3. BeginInvoke(Sub() MachWasHaupt())
    4. BeginInvoke(Sub() MachWasHaupt())
    5. End Sub
    Wartet hier der zweite Durchlauf MachWasHaupt auf das Ende des Ersten oder laufen sie parallel (kann ja eigentlich nicht weil gleicher Thread)?

    VB.NET-Quellcode

    1. Private Sub TestInvoke
    2. MachWasNeben()
    3. Invoke(Sub() MachWasHaupt())
    4. BeginInvoke(Sub() MachWasHaupt())
    5. End Sub
    Hier geht es ja nicht anders nach der Logik im zweiten Beispiel.

    Ich würds gerne testen, aber mit mehreren Threads fällt mir das Debuggen schwer.
    Viele Grüße
    ich würde deiner Interpretation in allen Punkten zustimmen.
    das zu debuggen ist vom prinzip her nicht so schwer - man muss so eine konstruktion aber erstmal basteln - dann kann man mit Debug-Print von jedem thread aus was ausgeben.
    Hübsch dabei ist, wenn man Threading.ManagedThreadId (oder so ähnlich) mit ausgibt - dann kann man auch die Threads unterscheiden, die die jeweilige Debug-meldung ausgegeben haben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!