Thread, class et objets [Résolu]

cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention - 11 mai 2010 à 21:16 - Dernière réponse : LUDINSKI 441 Messages postés mardi 2 décembre 2003Date d'inscription 22 mai 2012 Dernière intervention
- 12 mai 2010 à 14:34
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!!!!!!!!!
Afficher la suite 

6 réponses

Répondre au sujet
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 12 mai 2010 à 08:25
+3
Utile
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)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de SharpMao
LUDINSKI 441 Messages postés mardi 2 décembre 2003Date d'inscription 22 mai 2012 Dernière intervention - 12 mai 2010 à 12:12
+3
Utile
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 ;)
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de LUDINSKI
cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention - 12 mai 2010 à 09:36
0
Utile
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!!!!!!!!!
Commenter la réponse de cs_thebigboss
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 12 mai 2010 à 12:56
0
Utile
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)
Commenter la réponse de SharpMao
cs_thebigboss 216 Messages postés jeudi 30 janvier 2003Date d'inscription 12 avril 2017 Dernière intervention - 12 mai 2010 à 13:38
0
Utile
Merci à vous 2 ça marche impec!!!!



A+

*******************************************
SharpDevelop est mon ami! CSharpFR.com aussi!!!!!!!!!
Commenter la réponse de cs_thebigboss
LUDINSKI 441 Messages postés mardi 2 décembre 2003Date d'inscription 22 mai 2012 Dernière intervention - 12 mai 2010 à 14:34
0
Utile
Pas de quoi !
Ca m'fait plaisir ;)
Commenter la réponse de LUDINSKI

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.