Oui, en voici le résultat :Dobro a écrit :ta posé la question sur le forum anglais ?
Réponse de Demivec
Ce qui arrive dans ton exemple de code est que tu ne traite pas les événements de fenêtre chaque fois la fonction SetGadgetText() est exécutée. Tu change l'affichage d'un gadget donc il devrait être redessiné via un événement de fenêtre. Quand tu traite finalement un événement de fenêtre
- c'est après que le thread et le code de boucle principal aient, par boucles, terminés les modifications des gadgets,
- c'est quand tu vois le résultat de tous les événements qui auraient actualisé l'affichage des gadgets.
Essaie de changer ton exemple légèrement pour traiter les événements de fenêtre pendant la boucle dans le code principal (commençant en line n° 39), comme cela :
Code : Tout sélectionner
For Compteur_Win0 = 0 To 29999
SetGadgetText(#Compteur_Win0, Str(Compteur_Win0))
Repeat
event = WindowEvent() ;<== Pas parfait, mais illustre ce que je veux dire.
Until event = 0
Next
the gadgets display. Try changing your example slightly to process window events during the loop in the main code (starting on line#39), like this : »
Réponse de freak
SetGadgetText () (du thread) demande à la synchronisation de livrer les messages de fenêtre. Donc tu as besoin d'appeler (Wait) WindowEvent () dans la boucle principale si tu modifie des gadgets depuis un thread.
Tu peux faire cela en utilisant WaitThread () avec un court délai et insérer (Wait) WindowEvent () pour manipuler les événements.
« SetGadgetText() (from the thread) requires thread synchronisation to deliver the window messages. So you need to call (Wait)WindowEvent() in the main thread if you modify gadgets from a thread. You can do this by using WaitThread() with a small timeout and calling (Wait)WindowEvent() inbetween to handle events. »