Aus einer von einem Thread gestarteten Methode, die sich in einem Modul befindet, Form-Elemente verändern

  • VB.NET

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

    Aus einer von einem Thread gestarteten Methode, die sich in einem Modul befindet, Form-Elemente verändern

    Hallo,

    ich sitze jetzt schon seit einigen Stunden dran und probiere alles möglich mit Delegates aus.
    Hier ist das Beispiel:

    VB.NET-Quellcode

    1. Module test
    2. Private t As New Threading.Thread(AddressOf Listen)
    3. Public Sub startModule()
    4. t.Start()
    5. End Sub
    6. Private Sub Listen()
    7. Form1.TextBox1.Text = "Test"
    8. End Sub
    9. End Module
    10. Public Class Form1
    11. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    12. test.startModule()
    13. End Sub
    14. End Class



    Bei so Fällen haben mich Delegates bisher immer weiter gebracht, aber diesmal will es nicht :(
    @DavidVB Das geht so überhaupt nicht.
    Zunächst solltest Du Dich damit befassen, was Form1 in Deinem Snippet ühaupt ist.
    Unten der Name einer Klasse, oben die grottige blöde schlimme sch.... VB6-Kompatibilitäts-Instanz der Form, auf die Du ühaupt nicht aus einem anderen Thread zugreifen kannst, da dort eine neue Kompatibilitäts-Instanz erstellt wird.Pack zunächst den Thread in eine Klasse, am besten in die Klasse Form1.
    Dann kannst Du per Invoke auf das GUI-Control zugreifen:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private t As New Threading.Thread(AddressOf Listen)
    3. Public Sub startModule()
    4. t.Start()
    5. End Sub
    6. Private Sub Listen()
    7. Me.BeginInvole(Sub() Me.TextBox1.Text = "Test")
    8. End Sub
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    10. Me.startModule()
    11. End Sub
    12. End Class
    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!
    Evtl. Im Modul nen Event auslösen, welches in der Form abonniert wurde. Invoken muss man aber auch da.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen