Fensterupdate von selbstgeschriebenen "Dialog-Based" Anwendungen hängt

Dieses Thema Fensterupdate von selbstgeschriebenen "Dialog-Based" Anwendungen hängt im Forum "Windows XP Forum" wurde erstellt von ms-mize, 1. Aug. 2010.

Thema: Fensterupdate von selbstgeschriebenen "Dialog-Based" Anwendungen hängt Hallo zusammen, ich schreibe öfters mal Dialog-Based Anwendungen mit der MSVC (MSVC-6 oder neuer). Die Dialoge...

  1. Hallo zusammen,

    ich schreibe öfters mal Dialog-Based Anwendungen mit der MSVC (MSVC-6 oder neuer).

    Die Dialoge haben meist mehrere Button´s an der Seite, über die die durchzuführende Aktion angewählt werden kann (die dann durchgeführte Aktion läuft schon mal 2-3 Minuten), ein List-Fenster, das anzeigt was gerade bei der Aktion so passiert, und einen Progress-Bar, der den Fortschritt der Aktion erkennen läßt ... (mit pList->UpdateWindow() sorge ich z.B. dafür, daß ich die neuen Zeilen im Listfenster auch sofort, d.h. wärend die Aktion noch läuft, zu sehen bekomme; das klappt auch soweit)

    Nur wenn kurz mal ein anderes Fenster (z.B. der Windows-Eplorer) über meinem laufenden Dialog lag, oder diesen auch nur teilweise überdeckt hat, dann friert mein Dialog ein (d.h. er arbeitet zwar intern korrekt weiter, es wird aber bis die gerade laufende Aktion beendet ist weder die Listbox noch der Progressbar upgedatet). Jetzt ist Blindflug angesagt - man sieht weder was gerade passiert, noch wie weit das Program im Moment ist. Erst wenn die Aktion fertig ist, werden alle Fenster wieder refresht, und nun ist der Inhalt der Listbox (der zwischenzeitlich nicht zu sehen war) mit allen Inhalten wieder da ...

    Ich suche jetzt nach einer Möglichkeit, im Programm diesen Update-Hänger zu erkennen und zwischendurch zu beenden, so daß die Fenster wieder wie zuvor korrekt upgedatet werden ... (und das, ohne meine Anwendung komplett umzubauen, neue Threads einzuführen, etc.)

    Deswegen meine Frage: Wie erkenne ich in der Anwendung, daß die Fenster nicht mehr refresht werden? Kann ich z.B. alle 5 sec. etwas anstoßen, so daß sich diese Blockade - falls aufgetreten - wieder beheben würde? Gibt es da andere hilfreiche Trick´s ???

    m.f.G. Michael