Label.Update() funktioniert nicht richtig

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    Kirche im Dorf? Philosophie? Diskussion? Ich komm nicht ganz mit. Aber wurscht.
    Wie EdR bereits in Post#2 schrieb: Die Aufgabe des Mainthreads ist das Zeichnen des Form(ular)s und die Interaktion mit dem User. Alle anderen Aufgaben (Daten laden, Dinge berechnen, Steuererklärung machen, Welt retten) sind Dinge, die dem Main-Thread quasi noch auf den Schreibtisch zur Abarbeitung gelegt werden können. Das bearbeitet er schon, auch schön der Reihe nach. Nur dann kann es sein, dass seine Hauptaufgabe auf der Strecke bleibt. Deshalb wäre es immer ratsam, schwerlastige Aufgaben in einem anderen Thread laufen zu lassen. Oder die Tatsache zu akzeptieren, dass die Bildschirmanzeige hängen bleibt. Aber Vorsicht! Nach einer Minute Auslastung schmiert das Programm ab, weil Windows der Meinung ist, dass das Form nicht mehr ansprechbar ist, weil es seine Nachrichten (die in der MessageQueue sind) nicht liest und abarbeitet.
    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 1 mal editiert, zuletzt von „VaporiZed“ ()

    @Peter329 Du kannst natürlich eine weitere Form TopMost anzeigen, die in einem zweiten GUI-Thread läuft, mit der kannst Du per Event kommunizieren und die zeigt dann alles fein an.
    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!
    Ok, ich habs ja verstanden.

    Meine Anforderung kollidiert mit Funktionsweise des GUI. So einfach wie ich mir das mit dem Sekundenzähler vorgestellt habe, geht das halt nicht.

    Das kann man beheben, in dem man die Struktur der Anwendung ändert (s. EDR) oder man kann es umgehen, indem man eine Topmost Anwendung schreibt und damit ein zweites GUI verwendet (s. RFG).

    Das habe ich in diesem Thread jetzt gelernt ... und damit hat sich die Diskussion gelohnt.

    Na, dann schminke ich mir den Sekundenzähler halt ab ... wenigstens funktioniert ja die Sache mit dem Update der Statusmeldung, wenn man auf die automatische Größenanpassung verzichtet.

    Danke an alle Ratgeber ... wie immer Daumen hoch ... und einen schönen Wintertag mit viel Schnee ! :)

    LG
    Peter
    @Peter329 Du kannst natürlich auch die komplette Berechnung in einem einzigen Thread abarbeiten lassen, dann ticken die Sekunden richtig und die GUI blockiert nicht.
    Und der Timer kann dann auch wieder im GUI-Thread laufen.
    Das Zauberwort wäre dann Async Await, dazu wirst Du im Forum fündig.
    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!
    Async/Await hatte Peter ja schon in Post#4 versucht, aber da die beiden immer zusammengehören und letzteres nicht dabei war …
    Hier hatte EdR sich dazu ausgelassen: Async/Await
    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.

    VaporiZed schrieb:

    hatte Peter ja schon in Post#4 versucht,
    Ich denke, das war einfach falsch designed.
    Den Zustand der CheckBoxen in Flags packen und dann den Inhalt von cmdProcessAllSelected_Click() in die Thread-Prozedur packen, und im Aufruf vorher den Timer starten und feddich.
    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!

    VaporiZed schrieb:

    Async/Await hatte Peter ja schon in Post#4 versucht, aber da die beiden immer zusammengehören und letzteres nicht dabei war …
    Hier hatte EdR sich dazu ausgelassen: Async/Await


    Na ja, wie hätte es denn richtig lauten müssen ?

    RodFromGermany schrieb:

    VaporiZed schrieb:

    hatte Peter ja schon in Post#4 versucht,
    Ich denke, das war einfach falsch designed.
    Den Zustand der CheckBoxen in Flags packen und dann den Inhalt von cmdProcessAllSelected_Click() in die Thread-Prozedur packen, und im Aufruf vorher den Timer starten und feddich.


    Den Zustand der CheckBoxes in Flags packen ist ja kein Thema. Und den Inhalt von cmdProcessAllSelected_Click() in die Thread-Prozedur packen genauso wenig. Das klingt mir auf den ersten Blick sehr einfach. Sollte es also doch eine Lösung für mein Problem geben ?

    Wenn ich die erforderliche "Async - Wait" Syntax kenne, dann will ich gern noch einmal einen Versuch wagen. Aber bitte präzise sein ... denn ich bin kein Hellseher ... :)

    LG
    Peter

    Peter329 schrieb:

    denn ich bin kein Hellseher
    Aber ein guter Im-Forum-Finder mit den richtigen Keywords.
    Und:
    Suche erst bei Frau Google, die findet falsch geschriebene Suchanfragen auch im Forum, die Forum-Suchmaschine 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!
    So, bevor es heißt …
    Aber erst reinschauen, wenn Du gar nicht mehr weiter weißt bzgl. Async/Await, @Peter329 ;)
    Dateien
    • WindowsApp1.zip

      (13,89 kB, 50 mal heruntergeladen, zuletzt: )
    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.