Update de l'UI

Résolu
cs_terranigma Messages postés 27 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 29 décembre 2010 - 8 déc. 2008 à 13:08
cs_terranigma Messages postés 27 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 29 décembre 2010 - 8 déc. 2008 à 17:35
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

billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
8 déc. 2008 à 17:07
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
---------------------
3
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
8 déc. 2008 à 13:30
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
---------------------
0
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
8 déc. 2008 à 13:31
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
---------------------
0
cs_terranigma Messages postés 27 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 29 décembre 2010
8 déc. 2008 à 14:57
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()
0

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

Posez votre question
billou_13 Messages postés 860 Date d'inscription jeudi 4 mars 2004 Statut Membre Dernière intervention 19 août 2014 29
8 déc. 2008 à 15:16
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
---------------------
0
cs_terranigma Messages postés 27 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 29 décembre 2010
8 déc. 2008 à 16:27
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?
0
cs_terranigma Messages postés 27 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 29 décembre 2010
8 déc. 2008 à 17:16
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.
0
cs_terranigma Messages postés 27 Date d'inscription mardi 25 avril 2006 Statut Membre Dernière intervention 29 décembre 2010
8 déc. 2008 à 17:35
Très bon lien Billou, problème résolu!
Bonne soirée à toi aussi!
0
Rejoignez-nous