Update de l'UI

[Résolu]
Signaler
Messages postés
27
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
29 décembre 2010
-
Messages postés
27
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
29 décembre 2010
-
Bonjour à tous,

Mon problème est le suivant : pour exploser les choses clairement on va dire que j'ai une classe "worker" d'un côté et l'UI de l'autre. J'aimerais savoir quelle est le meilleur moyen pour mettre à jour l'interface graphique de la fenêtre principal. J'ai un toolStrip qui contient une progressBar que je souhaiterais faire évoluer en fonction de la tâche et un label qui affiche la tâche courrante.
J'ai bien essayé diverses méthodes d'amateurs et de bidouilleurs qui sont plus ou moins efficace mais j'aimerais savoir le meilleur moyen de mettre à jour l'UI en fonction de ce que fait une tâche.

Merci d'avance à tous ceux qui me proposeront quelque chose!

8 réponses

Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
26
Bonsoir,

On va peut-être me trouver chauvin mais c'est pas grave ^^
Regardes un peu du côté de cette source: http://www.csharpfr.com/codes/LOGICIEL-RECHERCHE-REMPLACEMENT-DANS-REPERTOIRE-SOUS-REPERTOIRES_39713.aspx
Il y a tout ce dont je parlais.

Peut-être (même très certainement) y-t-il d'autres sources sur le site codes-sources mais je n'ai pas les noms sur le coup.

Bonne soirée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
26
Bonjour,

Un petit tuto très bien fait pour résoudre ce problème (merci MorpionMx):
http://www.csharpfr.com/tutoriaux/CSHARP-OPERATIONS-CROSS-THREADS-UTILISATION-DELEGATIONS-SYNCHRONES-ASYNCHRONES_174.aspx

Bonne journée,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
26
J'ai oublié l'exemple avec le progressbar (merci encore MorpionMx):
http://www.csharpfr.com/code.aspx?ID=40294

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Messages postés
27
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
29 décembre 2010

Merci pour la rapidité de la réponse Billou!
Je suis encore en train d'étudier le tuto pour l'instant mais j'ai regardé l'autre exemple avec la progressBar et celà ne correspond pas car je suis dans un classe et je n'ai pas accès à this.BeginInvoke()
Messages postés
860
Date d'inscription
jeudi 4 mars 2004
Statut
Membre
Dernière intervention
19 août 2014
26
Tout a fait.

Mais il ne faut pas que tu gère ta progressbar dans un classe à part.
Il faut que ce soit ta Form (ou UserControl) qui mette à jour la progressbar. Par conséquent, elle aura accès à this.BeginInvoke(..).

Tu vas me dire pourquoi ?
Parce que ta classe qui fait le traitement devient dépendante d'une interface; et ça, c'est pas bien :)

Une solution consiste donc à faire une classe traitement qui lance des événements (exemple, un event pour le début de traitement, 1 pr la fin, 1 pour chaque fin de fichiers traités...).
Ensuite, tu pourras alors binder ce que tu veux dessus: une console, une form, un usercontrol, un service windows etc...
Il te suffira alors d'appeler la classe et de t'abonner à ces événements. Chauqe événement fera des choses différents suivants le type de l'objet qui s'abonne aux événements.

Ou sinon, si tu veux pas batailler (même si je pense que ce serait une très bonne solution), tu donnes à ta classe l'objet Form et cette dernière n'aura plus qu'à appeler des méthodes pour mettre à jour ton progressbar.

Voila tout,

Billou_13
Bask En Force

--------------------------------------------------------------------
Connaître la réponse est une chose, savoir pourquoi en est une autre
---------------------
Messages postés
27
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
29 décembre 2010

hmmm :) la première solution semble propre et c'est vrai que j'aimerais bien mettre ça en place histoire d'être tranquille une fois pour toute et pouvoir la réutiliser par la suite. Ca semble cela dit au delà des mes compétences actuelles, aurait-tu par hasard un exemple ou vu une source qui utilise ton concept de classe traitement avec un bind et des évenements?
Messages postés
27
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
29 décembre 2010

Je viens de trouver ça en attendant après avoir interrogé google http://forums.whirlpool.net.au/forum-replies-archive.cfm/219650.html j'ai fais un test ça marche plutôt bien! Je pense qu'il s'agit de la méthode que tu m'as conseillé.
Je vais m'intéresser aussi à ton lien vu que c'est pour du traitement de fichiers.
Messages postés
27
Date d'inscription
mardi 25 avril 2006
Statut
Membre
Dernière intervention
29 décembre 2010

Très bon lien Billou, problème résolu!
Bonne soirée à toi aussi!