Passage de données entre thread

Messages postés
37
Date d'inscription
lundi 11 avril 2011
Dernière intervention
1 novembre 2018
- - Dernière réponse : Whismeril
Messages postés
12399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
- 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
Afficher la suite 

Votre réponse

6 réponses

Messages postés
37
Date d'inscription
lundi 11 avril 2011
Dernière intervention
1 novembre 2018
0
Merci
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
Commenter la réponse de RLAPT
Messages postés
12399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
0
Merci
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?
Commenter la réponse de Whismeril
Messages postés
37
Date d'inscription
lundi 11 avril 2011
Dernière intervention
1 novembre 2018
0
Merci
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
Commenter la réponse de RLAPT
Messages postés
12399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
0
Merci
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é?
Commenter la réponse de Whismeril
Messages postés
37
Date d'inscription
lundi 11 avril 2011
Dernière intervention
1 novembre 2018
0
Merci
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
Commenter la réponse de RLAPT
Messages postés
12399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 décembre 2018
0
Merci
En fait, comment faire pour remettre à jour la form à une fréquence donnée avec un seul thread ?

en utilisant le Dispatcher.
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.