Programm arbeitet zwar, aber text ändert sich nicht

  • VB.NET
  • .NET (FX) 4.0

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

    Programm arbeitet zwar, aber text ändert sich nicht

    ich habe das hier:

    VB.NET-Quellcode

    1. If My.Settings.lang = "Deutsch / German" Then
    2. SaveLoadProgress.Label1.Text = "Speichere:" & OpenFileDialog1.SafeFileName
    3. Else
    4. SaveLoadProgress.Label1.Text = "Saving:" & OpenFileDialog1.SafeFileName
    5. End If


    in meinem Thread rein, aber der text ändert sich nicht, der rest vom programm arbeitet.
    und der Timer wird am ende auch nicht gestartet...

    Weiß jemand evt warum?

    Thread? Timer? Sieht man im Code gar nicht. Gut versteckt! Aber da hoffe ich doch mal, dass Du nicht versuchst, in einem Nebenthread Beschriftungen des Forms zu ändern. Oder doch?
    Käme denn das Programm bei gesetzten Breakpoints in Zeile 2 und 4 an?
    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.
    Und die Antwort auf die andere Frage? Läuft der gezeigte Code in einem Nebenthread?
    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.
    Herzlichen Glückwunsch, da wird sich @RodFromGermany freuen.
    Ich weiß zwar nicht, ob das den Tatsachen entspricht, aber der Form-Name ist in meinem Sprachgebrauch eine »thread dependent property*«. In jedem Thread ist Dein SaveLoadProgress eine eigene, selbständige Form-Instanz! Wenn Du eine Form wie in Zeile 2 und 4 mit ihrem Namen ansprichst oder auf ihre Member zugreifst, dann ergibt sich in jedem Thread eine Änderung in der jeweiligen Thread-Instanz. Hast Du also 2 Threads laufen, hast Du pro Thread eine SaveLoadProgress-Instanz. Im Hauptthread, dessen Ergebnis Du als GUI siehst, hast Du SaveLoadProgress-Instanz Nummer 1. In Deinem Nebenthread jedoch SaveLoadProgress-Instanz Nummer 2, die Du zwar änderst. Aber das wirkt sich nicht auf den Hauptthread und damit SaveLoadProgress-Instanz 1 aus. Du änderst zwar was, aber das wirst Du nicht sehen. Du musst per Invoke arbeiten, da gibt's zahlreiche vbp-Themen dazu.

    *denn laut IntelliSense ist es eine Property, auf die man da zugreift und nicht die Klasse; ja, es ist trotzdem VB6-Style. Oder Ranz, wie wohl RFG sagen würde
    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.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Wundert mich, dass es da nicht knallt. Normalerwiese kriegt man eine gewischt wenn man im Thread die GUI aktualisieren will ohne Invoke zu nutzen...

    Zudem, scheinst du deine Form nicht zu instanziieren und das Label ist wohl vermutlich Public(?). Alles in einem recht unsauber.

    So nebenbei, der Code da oben ist nicht sonderlich Rechenintensiv, warum muss der überhaupt in einem Thread stehen?
    "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
    @mrMo: Es gibt eben keinen Crash, eben weil man kein GUI-Form-CE ändert. Würde man es ohne den Formnamen z.B. mithilfe eines EventRaisings machen, käme der Crash, weil dann nicht das parallel laufende, threadeigene Form geändert wird.
    Und die CEs werden doch vom Designer von Haus aus als Friend deklariert.
    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.
    Dann ist das oben Beschrieben also ein Effekt der auftritt, wenn man die Form nicht instanziiert(?). Ok, kein wunder kenn ich dieses Verhalten nicht :)

    @xX-Nick-Xx warum muss das denn überhaupt in einem eigenen Thread laufen? Sonderlich rechenintensiv ist das ja nicht.
    "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
    @xX-Nick-Xx Für den Fall, dass Du Dein Programm mehrsprachig machen willst, gugst Du Programme mehrsprachig erstellen
    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!

    mrMo schrieb:

    warum muss das denn überhaupt in einem eigenen Thread laufen? Sonderlich rechenintensiv ist das ja nicht.


    Weil das Programm sich aufhängt beim speichern.
    (Da kam immer die CLR konnte 60sec etc...)
    Beim speichern passiert:
    -XML Werte speichern
    -XML Formartieren
    -Daten Komprimieren
    -Ordner Säubern
    -NumUpDown und Textboxen Clearen
    -Buttons wieder Freigeben

    Achso, da passiert also noch mehr also das was oben steht... Na dann isses ja evtl. Sinnvoll:-)
    "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
    @xX-Nick-Xx Teilst Du uns auch mit, wie?
    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!