Toon posts:

[BCB6 C++] Form build pas na proces

Pagina: 1
Acties:

Verwijderd

Topicstarter
Waarom krijg ik op een form mijn button en tekst pas te zien nadat het hele proces is uitgevoerd wat ik erin heb staan?

Korte uitleg:

- In Form1 roep ik Form 2 aan,
- op Form2 staan:
- een "Annuleren" button en een ProgressBar
- een Label1
- een functie TForm2::FormActivate

Onder die laatst genoemde functie zit een dik script die 5 tekstbestanden samenvoegt tot 2 xml's. Dit duurt ongeveer 20 seconden. Pas na die 20 sec. laat hij mijn "Annuleren" button goed zien. Tijdens die 20 sec. zie ik door de button heen mijn bureaublad.

Zo wil ik ook de 5 bestandsnamen laten zien in de Label1 tijdens het proces. Maar hij laat alleen de laatste bestandsnaam zien, maar ook pas na die 20 sec. procestijd.

Het rare is, de ProgressBar doet het wel perfect. Die zie je vanaf het begin en loopt ook netjes tijdens het proces mee.

Hoe kan ik dit oplossen?? Ik zoek me kapot en kom er niet uit.

  • whoami
  • Registratie: December 2000
  • Nu online
Omdat je die verwerking op de UI thread uitvoert, en die thread daar dus te druk mee bezig is, en geen tijd heeft om de UI te updaten.
Als je een responsief programma wilt, kan je het samenvoegen van die bestanden op een andere thread laten lopen. Op die manier heeft de UI thread tijd om te reageren op events. Wees wel indachtig dat je dan, als je die progress bar wil updaten, je die niet zomaar vanuit je worker thread mag updaten, je zal ervoor moeten zorgen dat de UI thread die progressbar updated. (dmv invoke oid).

owja, in C++ schrijf je geen scripts, maar programma's

https://fgheysels.github.io/


Verwijderd

Topicstarter
Juist, vandaar. Nou, dan ga ik me maar eens heel snel in die threads verdiepen....

Je hebt gelijk. Zal beter op mijn taal letten, zit iets teveel in php de laatste tijd.... :'(

Verwijderd

Als een aparte thread misschien teveel van 't goede is (eerst leren hoe threads werken, terwijl 't nu functioneel ook werkt) zou je ook in de samenvoeg-routine zo hier en daar wat Application.ProcessMessages kunnen opnemen. Die geeft even de tijd aan de applicatie om de pending Windows messages af te handelen, waaronder ook de messages die ervoor zorgen dat je form op 't scherm komt te staan.