Thread in Shared Sub starten

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von vico255.

    Thread in Shared Sub starten

    Moin,
    kann mir evtl jemand erklären warum das nicht funktioniert?

    Ich habe eine Shared Sub erstellt und möchte daraus einen Thread starten.
    Ist für mich nur ein Testprojekt um mal ein wenig den Horizont zu erweitern.

    VB.NET-Quellcode

    1. Namespace MySQL
    2. Public Class TestKlasse
    3. Public Shared Event Fire(ByVal i As Integer)
    4. Public MTH As New Threading.Thread(AddressOf RunTh)
    5. Private Property counter As Integer
    6. Public Shared Sub start()
    7. MTH.Start() '<--- Fehler: Auf einen Instanzmember einer Klasse kann nicht ohne explizierte Instanz einer Klasse von einer/m
    8. ' freigegebenen Methode/Member aus verwiesen werden.
    9. End Sub
    10. Private Sub RunTh()
    11. counter += 1
    12. RaiseEvent Fire(counter)
    13. Threading.Thread.Sleep(10)
    14. RunTh()
    15. End Sub
    16. End Class
    17. End Namespace


    Danke und bleibt gesund!
    In Arbeit...
    Steht da doch:

    vico255 schrieb:

    Auf einen Instanzmember einer Klasse kann nicht ohne explizierte Instanz verwiesen werden
    Frage: Was ist eine Instanz, was ist eine Klasse, was ein Verweis?

    Vor allem: Was bedeutet Shared?

    Ich sag mal vor: Shared Member sind keine ObjektMember - sie sind nur in der Klasse angesiedelt, aber keinem Objekt zugeordnet.
    Dein MTH ist nicht Shared - ist also Objekt-Member - nämlich Member der TestKlasse-Klasse.
    Du hast aber nirgends eine TestKlasse-Instanz erstellt.
    Tja, und ohne Instanz kannste natürlich auch nicht auf einen Instanz-Member zugreifen.
    Weil MTH nicht Shared ist. Daher hat jede TestKlassen-Instanz seine eigene MTH-Variable.

    VB.NET-Quellcode

    1. Dim Foo As New TestKlasse
    2. Dim Bar As New TestKlasse
    3. 'Foo.MTH ist nicht das selbe wie Bar.MTH


    ##########

    btw: Die Sub RunTh ruft sich immer wieder selbst auf. Das gibt irgendwann nen StackOverflow.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Danke für die schnelle Antwort.

    Ich bin gestern beim lesen über Shared gestolpert, was ich bisher nie genutzt habe.
    Oft benutz ich dafür Globale Variablen und mir kam der Gedanke das in eine eigene Klasse auszulagern.

    Das bedeutet um einen Thread zu starten, komm ich nicht drumrum auch einen Instanz einer Klasse zu erstellen? Versteh ich das richtig?
    In Arbeit...
    Kommt drauf an, was Du vorhast. Wenn es erstmal darum geht, das Ganze zum Laufen zu bringen, deklariere counter, MTH und RunTh ebenfalls als Shared.

    ##########

    globale Variablen - ganz pauschal: schau mal hier rein: "Sauberes" Programmieren, Alternativen zu globalen Variablen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Eh, doch. Was soll daran nicht funktionieren?
    Bilder
    • Proof.png

      7,81 kB, 489×272, 56 mal angesehen
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.