Thread, class et objets [Résolu]

Signaler
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
-
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
-
Bonjour,

J'ai un programme avec une mainform qui appelle une class.
J'ai une progressbar dans ma mainform et un thread qui la fait avancer (à l'aide de Invoke).

Lorsque j'execute le thread et dans ma mainform tout ce passe bien, la progressbar avance.

Maintenant, je souhaite déplacer mon thread dans ma class. Je copie/colle toutes les fonctions liées à ce thread dans ma class et là il ne veut pas compiler le "Invoke":
'monProg.maClass' ne contient pas une définition pour 'Invoke' et aucune méthode d'extension 'Invoke' acceptant un premier argument de type 'monProg.maClass' n'a été trouvée (une directive using ou une référence d'assembly est-elle manquante ?) (CS1061)

J'ai bien "using System.Threading", je ne comprends pas pourquoi j'ai cette erreur alors que je ne l'ai pas lorsque ces même fonctions se trouve dans ma Mainform...

Je ne suis pas sur d'avoir été clair...

J'espère que quelqu'un m'aura compris et me donnera des pistes.


Merci d'avance.

A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!

6 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
Hello,

C'est tout à fait normal. Invoke est une méthode que ta form principale hérite de la classe de base Form.
Le meilleur moyen de contourner le problème est sans doute d'ajouter un event Progress à ta classe, et d'abonner ta MainForm à cet event. De cette manière, tu peux à nouveau faire le Invoke, puisque tu es à nouveau dans ta MainForm.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Salut !!

Non en fait il te faut ajouter un évènement dans ta classe qui implémente le thread :
public event EventHandler OnProgressChanged;

Que tu déclencheras en faisant :
if (OnProgressChanged != null)
OnProgressChanged(this, EventArgs.Empty);


Puis dans ton formulaire tu dois t'abonner à cet évènement :
maClass.OnProgressChanged += new EventHandler(maClass_OnProgressChanged);

Et c'est dans la méthode maClass_OnProgressChanged qu'il te faudra faire ton Invoke...

Voila ;)
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
Merci pour ta réponse rapide.

Je comprends mieux pourquoi j'avais l'erreur. Par contre, si j'essaye d'acceder directement (sans Invoke) à la progressbar qui est dans ma class à partir du thread qui est lui aussi dans ma class, je n'ai pas d'erreur à la compilation, mais rien ne se passe.

Comment faire pour implémenter ta solution?

Il n'y a pas par défaut d'event Progress dans la progressbar, ni même de ValueChanged ou de truc comme ça...




A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
62
Merci pour les précisions Ludinski.


Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
216
Date d'inscription
jeudi 30 janvier 2003
Statut
Membre
Dernière intervention
12 avril 2017
2
Merci à vous 2 ça marche impec!!!!



A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Pas de quoi !
Ca m'fait plaisir ;)