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.
Partager