Thread ließt Variable falsch

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von fox(fux).

    Thread ließt Variable falsch

    Hallo Leute,
    ich habe folgendes Problem bei meinem Code:

    VB.NET-Quellcode

    1. Public Class Form1 'Die Hauptform welche zuerst gestartet wird
    2. Public test_variable As Integer
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. test_variable = do_something()
    5. Dim otherclass As New other
    6. otherclass.begin()
    7. End Sub
    8. Function do_something()
    9. 'hier wird was gemacht und dann returned, ich vereinfache
    10. Dim test_1 As Integer = 100
    11. Dim test_2 As Integer = 11
    12. Dim test_3 As Integer
    13. test_3 = test_1 + test_2
    14. Return test_3
    15. End Function
    16. End Class
    17. Public Class other 'Eine selbst erstellte Klasse, in welche ich Sachen auslagere
    18. Dim test_thread As Threading.Thread
    19. Public Sub begin()
    20. test_thread = New Threading.Thread(AddressOf threadsub)
    21. test_thread.Start()
    22. End Sub
    23. Public Sub threadsub()
    24. MsgBox(Form1.test_variable)
    25. End Sub
    26. End Class


    Die MsgBox im Thread zeigt dann aber immer nur 0 an und nicht 111.
    Wieso? Wie kann ich es machen, dass der Thead in der MsgBox 111 anzeigt?

    Danke für Euer Bemühen im Vorraus!
    mfg fox(fux)

    fox(fux) schrieb:

    MsgBox(Form1.test_variable)

    Völlig korrekt.
    Im anderen Thread musst Du die Form1 als mit New erstellte Instanz (Me) übergeben bekommen.
    Der Aufruf von Form1.Irgendwas erstellt implizit eine neue Instanz von Form1, auf die dann zugegriffen wird.
    Manchmal funktioniert das, bei mehreren Threads jedoch nicht.
    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!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()