Bonjour,

Je développe une sorte de client FTP. Les fichiers/dossiers distants sont listés dans un treeview. Lorsque l'utilisateur clique sur un noeud, l'appli cherche les noeuds enfants sur le serveur (les sous-répertoires).

Je voudrais, le temps de l'attente, mettre une progressBar. J'avais eu l'idée de lancer un thread pour animer cette progress bar le temps que le serveur FTP réponde.

Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(avance));
t.Priority = System.Threading.ThreadPriority.Normal;
t.Start();
 
//traitement pour récupérer les infos sur le serveur FTP
...

Pourtant le thread commence à s'exécuter seulement après la récupération de toutes les infos, donc aucun intérêt.

J'ai donc essayé de lancer deux threads en parallèle
* un pour la progressBar
* un autre pour la requete ftp

Là, le thread de la progressBar démarre immédiatement.

En revanche, je ne peux pas passer d'argument (le noeud sur lequel on a cliqué). Une FAQ developpez http://emerica.developpez.com/csharp/threads/ indique qu'il faut créer une nouvelle classe mais si je fais ceci, le n'aurai plus accès au treeview pour y ajouter des noeuds.

Dernier contournement :
J'ai créé une variable globale de type TreeNode auquel j'affecte le noeud sur lequel j'ai cliqué puis je lance le thread (pas propre mais c'est pour tester).

Ainsi, la méthode invoquée a bien le noeud sur lequel j'ai cliqué. En revanche, lorsque je veux lui affecter des noeuds enfants, j'ai cette exception :

L'action effectuée sur ce contrôle est appelée à partir d'un thread incorrect. Vous devez marshaler le thread correct en utilisant Control.Invoke ou Control.BeginInvoke pour effectuer cette action.

Comment puis-je solutionner ce problème ?

Merci d'avance.