Aller au contenu
Règlement du forum ×
IPTV et arnaques ×

passer des parametres a un thread C#


zaki

Messages recommandés

salut les amis,

je dois faire passer des paramètres a un thread (en c#) , mais je ne sais pas comment , j'ai essayer avec parametrizedThreadStart en suivant qlq exemples sur le net mais ca n'a pas marcher

 

voila un peut le code

 

public void receiver(Socket sc)
[color="Black"]{
...
 }

private void button1_Click(object sender, EventArgs e)
{
...
Socket client = main_sock.accept();
[color="Red"]Thread t = new Thread(new ParameterizedThreadStart(receiver));[/color]
t.Start(client); 
....
}[/color]

aider moi SVP

 

merci d'avance !

Lien vers le commentaire
Partager sur d’autres sites

salut les amis,

je dois faire passer des paramètres a un thread (en c#) , mais je ne sais pas comment , j'ai essayer avec parametrizedThreadStart en suivant qlq exemples sur le net mais ca n'a pas marcher

 

voila un peut le code

 

public void receiver(Socket sc)
[color=Black]{
...
 }

private void button1_Click(object sender, EventArgs e)
{
...
Socket client = main_sock.accept();
[color=Red]Thread t = new Thread(new ParameterizedThreadStart(receiver));[/color]
t.Start(client); 
....
}[/color]

aider moi SVP

 

merci d'avance !

 

Your code above won't work because ParameterizedThreadStart takes only delegates with object parameters.

 

Also you don't need the ParameterizedThreadStart any more, the Thread itself takes delegates.

 

Correct code

 

public void receiver([color=Red]object[/color] sc)
[color=Black]{
 [color=Red] Socket c = sc as Socket;
  if(c != null)[/color]
  {
     //do some work
  }
}[/color]
[color=Black]private void button1_Click(object sender, EventArgs e)
{
   ...
   Socket client = main_sock.accept();
   [color=Red]Thread t = new Thread(receiver);[/color]
   t.Start(client); 
....
}[/color]

 

Try it and let us know.

Modifié par Darkvader
Lien vers le commentaire
Partager sur d’autres sites

Salem,

 

Si t'es encore entrain de développer ton application de chat avec les sockets, je crois que je t'ai déjà répondu ICI concernant les AsyncCallBack et le multi-threading implicite, resté sans réponse.

 

mais je continue à dire que le meilleur moyen de faire ton IM est d'utiliser les AsyncCallBack

 

Ok je sorts.

 

 

merci bcp mourad khouya , mais j'hésite encore pour utiliser AsyncCallBack

 

Try it and let us know.

ca tres bien fonctionnée, Thx a lot !!

 

Voila mon projet d'IM opensource fait en VB.NET 1.1

 

http://code.google.com/p/devilmessenger/

 

@+

merci bcp pour le code frere !!

Modifié par zaki
Lien vers le commentaire
Partager sur d’autres sites

  • 4 weeks later...

bonjour,

concernant mon application toujours (messagerie instantanée) , je dois ajouter une fonctionnalité pour le partage de fichiers,c-a-d:

les clients connectés au serveur de messagerie ont la possibilité de mettre et télécharger des fichiers qui se trouve dans un dossier partagé dans le serveur .

mais franchement je ne sais pas quoi utiliser et d'où commencer, est ce que je dois utiliser le transfert via les sockets, installer un serveur ftp dans le poste serveur...etc , Aider moi svp;

 

merci d'avance !

Lien vers le commentaire
Partager sur d’autres sites

Salem,

 

Je crois que ces deux liens répondront à tes questions :

Commande FTP avec C#

 

Suite :)

 

Sinon si tu comptes faire un un transfert de fichier simple de client à client ou via le serveur je crois que le mieux serait de définir ton propre petit protocole :) t'as largement de quoi faire.

 

merci bcp khouya

Lien vers le commentaire
Partager sur d’autres sites

  • 3 weeks later...

Socket client = main_sock.accept();
   Thread t = new Thread(receiver);

devient

 

Socket client = main_sock.accept();
   Thread t = new Thread(delegate () { receiver ( client ) ; });

 

sinon pourquoi ne pas utiliser les nouveautés du framework, pour faire un chat avec WCF sa prend 5 minute, en plus tu peux changer de protocole en 10 seconde (en changeant juste un mot dans la configuration genre tcp devient http).

Lien vers le commentaire
Partager sur d’autres sites

 

Socket client = main_sock.accept();
   Thread t = new Thread(delegate () { receiver ( client ) ; });

 

Both solutions are right but your code won't work because that delegate needs to match ThreadStart which takes a parameter.

 

so your code needs to be as follows:

 

Socket client = main_sock.accept();
   Thread t = new Thread(delegate (object sock) { receiver ( client ) ; });

Modifié par Darkvader
Lien vers le commentaire
Partager sur d’autres sites

eux non!!

19.2.1. Passing Data to a Thread

Let's say we want to pass an argument to the method on which a thread starts.

To make this possible, Thread's constructor is overloaded to accept either of two delegates:

public delegate void ThreadStart( );

public delegate void ParameterizedThreadStart (object obj);

 

The limitation of ParameterizedThreadStart is that it accepts only one argument. And because it's of type object, it usually needs to be cast. An alternative is to use the parameterless ThreadStart in conjunction with an anonymous method as follows:

static void Main(  )
{
 Thread t = new Thread (delegate(  ) { Print ("Hello from t!"); });
 t.Start(  );
}
static void Print (string message) { Console.WriteLine (message); }

The advantage is that the target method (in this case, Print) can accept any number of arguments, and no casting is required.

 

Cf C# 3.0 in a Nutshell

Lien vers le commentaire
Partager sur d’autres sites

eux non!!

static void Main(  )
{
 Thread t = new Thread (delegate(  ) { Print ("Hello from t!"); });
 t.Start(  );
}
static void Print (string message) { Console.WriteLine (message); }

Cf C# 3.0 in a Nutshell

 

 

I agree, this one should work, only when you do t.Start(), but in case of Zaki's code which is t.Start(client), your code will throw an exception because it needs a matching parameter.

Modifié par Darkvader
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...