Passage de données entre thread

RLAPT Messages postés 48 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 29 avril 2020 - 14 mars 2018 à 12:39
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 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.

Cordialement

6 réponses

RLAPT Messages postés 48 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 29 avril 2020
14 mars 2018 à 12:49
ReBonjour,

Je viens de faire un essai avec une variable publique simple et ça fonctionne. J'ai donc une solution à mon problème.

Par contre, quelqu'un peut-il me donner la raison du dysfonctionnement avec une variable Structure ?

Merci d'avance

Cordialement
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
14 mars 2018 à 13:01
Bonjour
Sans code pas facile de répondre, mais cela vient peut être du fait qu’une structure est un type valeur.

Par contre un backgroundworker c’est un thread, alors pourquoi la,cer un thread deplus?
0
RLAPT Messages postés 48 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 29 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.

Cordialement
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
14 mars 2018 à 19:06
En fait, je ne voulais pas me compliquer la vie.


j'ai implanté un Backgroundworker (BGW) qui lui même lance un Thread

C'est contradictoire.
Avec un bgw pas besoin de thread.... c'en est un.

Si faire 2 thread, ça n'est pas se compliquer la vie, qu'est ce qui est compliqué?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RLAPT Messages postés 48 Date d'inscription lundi 11 avril 2011 Statut Membre Dernière intervention 29 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.

Cordialement
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 656
14 mars 2018 à 23:33
En fait, comment faire pour remettre à jour la form à une fréquence donnée avec un seul thread ?

en utilisant le Dispatcher.
0
Rejoignez-nous