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.

  • Messages

    • Netflix « Cet appareil n'est pas pris en charge par l'application » Pour les appareils sous Android  je vous apporte la solution au problème Netflix en affichant le message d'erreur « Cet appareil n'est pas pris en charge par l'application », un problème lors de l'exécution de la version officielle de l'application Netflix téléchargée depuis son site. Il semble que Netflix veuille rendre la vie plus difficile à ses utilisateurs sur les appareils non certifiés et la plupart des TV-Box chinoises, une pratique qu'il pratique depuis sa création et cela ne nous surprend pas, mais il a une solution simple . L’erreur Netflix affichant « Cet appareil n'est pas pris en charge par l'application », est un problème lors de l'exécution de la version officielle de l'application Netflix téléchargée depuis son site. Il semble que Netflix veuille rendre la vie plus difficile à ses utilisateurs sur les appareils non certifiés et la plupart des TV-Box chinoises, une pratique qu'il pratique depuis sa création et cela ne nous surprend pas, mais il a une solution simple . Explication du problème :  Netflix n'offre la compatibilité officielle de son application et l'option de qualité HD que sur les appareils qui passent son approbation, cela implique que seules les grandes marques internationales ont accès à ces options. Netflix rend les choses un peu plus difficiles pour les utilisateurs d'appareils non certifiés en proposant sur son site officiel une application qui génère de nouveaux problèmes de compatibilité. Pour installer Netflix et éviter l'erreur «  Cet appareil n'est pas pris en charge par l'application  », suivez le point suivant du manuel. Solutions : Ceci est un contenu masqué, merci de Se connecter ou S’inscrire    
    • C'est ce que fait aussi Sonelgaz les branchements doivent passer par l'entrée principale de l'abonné pour une question juridique dans notre bureaucratie les factures font foi de justification de domicile. Mais si AT le fait  c'est incompréhensible.
    • @Gt3Dz bien...même si l'activation est probablement pour 2025....
    • Début des travaux rue Abou Nouas à Hydra.  
    • Svp...expliquez moi un truc que j'essaye de comprendre...DEPUIS 5 ANS !!!! pourquoi AT place la fible par la porte principale de immeuble et des abonnés ?!! Pourquoi ils n'utilisent pas le même endroit que les lignes téléphoniques (qui seront supprimées)??   Pourquoi casser l'immeuble ? Pourquoi défigurer tout et rafistoler avec du plâtre  ?!  Wallah ça me dépasse !!!!!!!
×
×
  • Créer...