RLAPT
Messages postés48Date d'inscriptionlundi 11 avril 2011StatutMembreDernière intervention29 avril 2020
-
14 mars 2018 à 12:39
Whismeril
Messages postés18417Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 5 juin 2023
-
14 mars 2018 à 23:33
Bonjour,
je rencontre le problème suivant :
Je suis en train de modifier une application WindowsForm pour garder la main sur la form durant les traitements longs.
J'ai donc procédé comme ceci :
- Dans ma Form, j'ai implanté un Backgroundworker (BGW) qui lui même lance un Thread de la procédure contenant le long traitement.
- Dans mon BDW après avoir lancé le Thread je fait une boucle qui vérifie l'achèvement du Thread et qui active BGW.ProgressChanged toutes les secondes.
- Dans BGW.ProgressChanged, je remets à jour l'affichage de ma Form à partir d'une variable publique (créée à partir d'une structure). Cette variable publique est modifiée par une Sub appelée par le Tread.
Je constate que :
- Lorsque je suis dans la procédure du Thread et que je modifie la variable publique, le système fonctionne correctement.
- Lorsque je suis dans la Sub appelée par le Thread, seules les informations numériques sont modifiées sur la Form.
Mes questions :
- Peut-on procéder de la sorte ?
- Ce fonctionnement est-il normal ? Si oui pourquoi ?
- Quelle est la bonne méthode, en sachant que je voudrais modifier le moins possible mon ancien programme ?
Jespère que mon texte est suffisamment clair.
Merci d'avance de vos suggestions.
RLAPT
Messages postés48Date d'inscriptionlundi 11 avril 2011StatutMembreDernière intervention29 avril 2020 14 mars 2018 à 16:13
Bonjour,
Merci de la réponse.
En fait, je ne voulais pas me compliquer la vie. Le BackGroundWorker comporte tous les outils pour gérer la mise à jour de la Form. On peut le faire, bien sûr, avec un Trhead; Mais bon, je voulais aussi essayer.
RLAPT
Messages postés48Date d'inscriptionlundi 11 avril 2011StatutMembreDernière intervention29 avril 2020 14 mars 2018 à 19:29
Bonjour, suite
Je suis d'accord, mais les mécanismes de communication sont prémâchés par Microsoft.
En fait, comment faire pour remettre à jour la form à une fréquence donnée avec un seul thread ?
Dans mon BGW, je lance mon Thread de procédure longue, puis , je fait une boucle pour vérifier la fin du Thread lancé et d'une durée correspondant à mon temps de rafraîchissement. Dans cette boucle, je rafraîchi la form avec BGW.ProgressChanged. Dans la procédure de traitement long, je n'ai qu'a mettre à jour les variables quand elles sont disponibles. De plus, cette méthode fonctionne avec plusieurs Thread lancés en même temps.
Maintenant ça fonctionne correctement pour ce que je voulais faire.