Class, thread, Erreur.. [Résolu]

bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 15 févr. 2005 à 10:39 - Dernière réponse : bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention
- 23 févr. 2005 à 11:49
voilà mon code:

class Axe_move
{
//Attribu
private int i;
int[] v_moteur = new int[4];


//Constructeur
public Axe_move()
{
//Moteur avant, droite, valeur des pas
this.v_moteur[0]=10+192;
this.v_moteur[1]=6+192;
this.v_moteur[2]=5+192;
this.v_moteur[3]=9+192;
}


//méthodes
public void gauche(int v_pas)
{
this.i=v_pas;
Thread Time_break_motor_X;
motor_move move = new motor_move();
Time_break_motor_X = new Thread(new ThreadStart(move.axe_x(this.i))); //ICI l'erreur
Time_break_motor_X.Start();
}


private class motor_move
{
int v_pas;
public void axe_x(int v_pas)
{
this.v_pas=v_pas;


}


}


}

J'ai une erreur de compilation.. je comprends pas.. c'est surement tout bête.
Il me marque: Nom de méthode attendu
Afficher la suite 

15 réponses

Répondre au sujet
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 16 févr. 2005 à 12:02
+3
Utile
en fait d'apres ce que je disais ton code deviendrais qqch comme ça :
class Axe_move
{
//Attribu
private int i;
int[] v_moteur = new int[4];
private motor_move move;

//Constructeur
public Axe_move()
{
//Moteur avant, droite, valeur des pas
this.v_moteur[0]=10+192;
this.v_moteur[1]=6+192;
this.v_moteur[2]=5+192;
this.v_moteur[3]=9+192;
}


//méthodes
public void gauche(int v_pas)
{
this.i=v_pas;
Thread Time_break_motor_X;
move = new motor_move();
Time_break_motor_X = new Thread(new ThreadStart(move.axe_x)); //ICI l'erreur
Time_break_motor_X.Start();
}


private class motor_move
{
int v_pas;
public void axe_x()
{
this.v_pas=v_pas;


}


}


}

Le tout maintenant est d'affecter ta valeur autrement, par une propriété par exemple.

Mais regarde du coté de la solution des delegates proposée par bucherb, ça me semble plus interressant dans ton cas. :-)

Cocoricoooooooo !!!!
coq
MVP Visual C#
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_coq
bucherb 412 Messages postés lundi 26 mai 2003Date d'inscription 13 août 2007 Dernière intervention - 16 févr. 2005 à 14:09
+3
Utile
public class Axe_move
{
//Attribu
private int i;
private form1.struct_motor motor_struct_class;
//méthodes
public void gauche(form1.struct_motor structure)
{
this.motor_struct_class=strucutre;
}

Il faut bien que tu lui dise ou aller chercher ta structure..

-------------------------
Trambert le vert
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de bucherb
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 15 févr. 2005 à 10:54
0
Utile
La méthode associé à ton delegate ThreadStart ne doit pas avoir de paramètre.
Sinon tu declares ton instance move locale à la méthode, ce n'est pas bon, declare la plutot en tant que membre de la classe Axe_move.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 15 févr. 2005 à 10:54
0
Utile
Time_break_motor_X = new Thread(new ThreadStart(move.axe_x(this.i))); //ICI l'erreur

Pas d'argument pour la methode appelé par un thread.

Il faut faire autrement en passant par un wrapper par exemple

::|The S@ib|::
MVP C#.NET
Commenter la réponse de TheSaib
bucherb 412 Messages postés lundi 26 mai 2003Date d'inscription 13 août 2007 Dernière intervention - 15 févr. 2005 à 10:57
0
Utile
... ou par un délégué... Qui te fait exactement la même chose qu'un Thread, à ceci prêt qu'il est entièrement géré par le framework, et que tu peux lui passer des paramètres.

-------------------------
Trambert le vert
Commenter la réponse de bucherb
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 15 févr. 2005 à 11:02
0
Utile
C'est exact

::|The S@ib|::
MVP C#.NET
Commenter la réponse de TheSaib
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 15 févr. 2005 à 11:12
0
Utile
J'ai beaucoup de mal à comprendre ce vocabulaire technique !

Donc si j'ai bien compris, je ne peux pas passer de paramètre depuis mon thread.. Mais par contre je ne comprends pas comment faire pour passer le paramètre (en faisant différemment)..
Commenter la réponse de bip98
bucherb 412 Messages postés lundi 26 mai 2003Date d'inscription 13 août 2007 Dernière intervention - 15 févr. 2005 à 11:58
0
Utile
Il faut que tu crée un délégué

private delegate void MonDelegate (object peuimporte);

et ensuite tu crée ta méthode

private void MaMethodeDelegate (object peuimporte)
{
SqlConnection.Open(); // etc......
}

Et pour l'éxecuter, tu fais dans ton code

new MonDelegate (MaMethodeDelegate).BeginInvoke (tonObjetPeuImporte,null.null);

A la place de "object peu importe" tu peux mettre le nombre de paramères qui te chante..

-------------------------
Trambert le vert
Commenter la réponse de bucherb
bucherb 412 Messages postés lundi 26 mai 2003Date d'inscription 13 août 2007 Dernière intervention - 15 févr. 2005 à 12:00
0
Utile
le point entre les 2 null est bien sur une virgule ;-) Ce serait cool de pouvoir éditer ses messages lol..

-------------------------
Trambert le vert
Commenter la réponse de bucherb
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 16 févr. 2005 à 08:53
0
Utile
J'ai pas très bien compris pour les délégués ! J'ai trouvé une srouce sur:
http://www.csharpfr.com/code.aspx?ID=11492

Par contre la solution de M.Coq me semblait bien ! mais je l'ai pas trop compris ! Peux-tu me la reexpliquer ?
Commenter la réponse de bip98
bucherb 412 Messages postés lundi 26 mai 2003Date d'inscription 13 août 2007 Dernière intervention - 16 févr. 2005 à 09:07
0
Utile
Un délégé c'est ce qui est utilisé pour gérer les évenements.

Donc quasiment de la même façon que tu crée un évenement, tu crée un délégué, la méthode qui va avec, et en utilistant MonDélégué.BeginInvoke ça va te créer un thread automatisé pour ta méthode.

-------------------------
Trambert le vert
Commenter la réponse de bucherb
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 16 févr. 2005 à 13:35
0
Utile
J'ai encore une petite question, mais cette fois c'est avec un envoie d'une structure dans la class:

Dans mon Form1:

public struct struct_motor
{
public string port_dev;
public int last_value;
public int v_pas;
public bool v_end;
}

public struct_motor motor_config;

motor_config = new struct_motor;

---> envoie dans la class:
Axe_move motor_class = new Axe_move();
motor_class.gauche(motor_config);

Dans la Class Axe_move:

public class Axe_move
{
//Attribu
private int i;
private struct_motor motor_struct_class;


//méthodes
public void gauche(struct_motor structure)
{
this.motor_struct_class=strucutre;
}

Il y a une erreur car dans ma class le compilateur me dit:
Le type ou le nom d'espace de noms 'struct_motor' est introuvable (une directive using ou une référence d'assembly est-elle manquante ?
Commenter la réponse de bip98
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 16 févr. 2005 à 14:34
0
Utile
Merci, ça marche !
Commenter la réponse de bip98
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 22 févr. 2005 à 14:20
0
Utile
Désolé de vous déranger encore une fois..


<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />


J’ai un petit problème, je cherche depuis longtemps mais j’y arrive pas !!!





J’envoie une structure dans ma class.. Axe_move.gauche puis je voudrais reprendre cette


Structure et la renvoyer dans la class motor_move… mon problème est que j’arrive pas à l’envoyer à la class motor _move depuis Axe_move.gauche. Comment faire ?





Voilà mon code :

namespace Motor_class
{
public class Axe_move
{
//Attribu
private Test_moteur.f_moteur.struct_motor motor_struct_class;
//méthodes
public void gauche(Test_moteur.f_moteur.struct_motor structure_config)
{
this.motor_struct_class=structure_config;
Thread Time_break_motor_X;
motor_move move = new motor_move(this.motor_struct_class);
Time_break_motor_X = new Thread(new ThreadStart(move.axe_x));
Time_break_motor_X.Start();
}


private class motor_move
{


int v_pas;
int v_ind;
int[] v_moteur = new int[4];



public motor_move(????) //Je voudrais recevoire la structure motor_struct_class ici
{


//Moteur avant, droite, valeur des pas
this.v_moteur[0] =10+192;
this.v_moteur[1]=6+192;
this.v_moteur[2]=5+192;
this.v_moteur[3]=9+192;
}


public void axe_x()
{

for(int go=0 ; go<motor_struct_class.v_pas ; go++)
{
try
{
using (Task digitalWriteTask = new Task("DigitalWriteTask"))
{
// Create an Digital Output channel and name it.
digitalWriteTask.DOChannels.CreateChannel("Dev1/Port1","",
ChannelLineGrouping.OneChannelForAllLines);
// Write digital port data. WriteDigitalSingChanSingSampPort writes a single sample
// of digital data on demand, so no timeout is necessary.
DigitalSingleChannelWriter writer = new DigitalSingleChannelWriter(digitalWriteTask.Stream);
writer.WriteSingleSamplePort(true, (int)this.v_moteur[motor_struct_class.v_ind]);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
v_ind++;
if(motor_struct_class.v_ind>3)
motor_struct_class.v_ind=0;
Thread.Sleep(0);
}
}
}
}
}
Commenter la réponse de bip98
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 23 févr. 2005 à 11:49
0
Utile
C'est bon j'ai trouvé... j'ai peut.etre posté un peu vite.. désolé !
Commenter la réponse de bip98

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.