Bonsoir,
Je suis confronté au problème suivant. J'ai une forme qui lance des
threads (socket client bloquant). J'associe un serveur à plusieurs
bouton de ma forme.
Sur chaque click de bouton, je lance un thread en passant le bouton en
paramètre.
t = new Thread(new ParameterizedThreadStart(sendAndReceive));
t.Start(who);
Je passe le bouton en paramètre à ma forme dans une méthode genre
static void sendAndReceive(Object button)
Mon problème est que je veux récupérer ou mettre à jour des informations
sur ma forme mais comme j'appelle une méthode statique, impossbile.
J'avais dèjà fait ce genre de chose mais sans passser de paramètre.
Bref je galère. Quelqu'un peut-il m'éclairer. Merci.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Delf
Pierre avait énoncé :
Je suis confronté au problème suivant. J'ai une forme qui lance des threads (socket client bloquant). J'associe un serveur à plusieurs bouton de ma forme. Sur chaque click de bouton, je lance un thread en passant le bouton en paramètre.
t = new Thread(new ParameterizedThreadStart(sendAndReceive)); t.Start(who);
Je passe le bouton en paramètre à ma forme dans une méthode genre
static void sendAndReceive(Object button)
Mon problème est que je veux récupérer ou mettre à jour des informations sur ma forme mais comme j'appelle une méthode statique, impossbile.
J'avais dèjà fait ce genre de chose mais sans passser de paramètre.
Bref je galère. Quelqu'un peut-il m'éclairer. Merci.
Ne vaut-il mieux pas utiliser des delegates pour interagir avec les contrôles de la Form ?
Sinon, pourquoi utilises-tu une static ?
-- Delf
Pierre avait énoncé :
Je suis confronté au problème suivant. J'ai une forme qui lance des threads
(socket client bloquant). J'associe un serveur à plusieurs bouton de ma
forme.
Sur chaque click de bouton, je lance un thread en passant le bouton en
paramètre.
t = new Thread(new ParameterizedThreadStart(sendAndReceive));
t.Start(who);
Je passe le bouton en paramètre à ma forme dans une méthode genre
static void sendAndReceive(Object button)
Mon problème est que je veux récupérer ou mettre à jour des informations
sur ma forme mais comme j'appelle une méthode statique, impossbile.
J'avais dèjà fait ce genre de chose mais sans passser de paramètre.
Bref je galère. Quelqu'un peut-il m'éclairer. Merci.
Ne vaut-il mieux pas utiliser des delegates pour interagir avec les
contrôles de la Form ?
Je suis confronté au problème suivant. J'ai une forme qui lance des threads (socket client bloquant). J'associe un serveur à plusieurs bouton de ma forme. Sur chaque click de bouton, je lance un thread en passant le bouton en paramètre.
t = new Thread(new ParameterizedThreadStart(sendAndReceive)); t.Start(who);
Je passe le bouton en paramètre à ma forme dans une méthode genre
static void sendAndReceive(Object button)
Mon problème est que je veux récupérer ou mettre à jour des informations sur ma forme mais comme j'appelle une méthode statique, impossbile.
J'avais dèjà fait ce genre de chose mais sans passser de paramètre.
Bref je galère. Quelqu'un peut-il m'éclairer. Merci.
Ne vaut-il mieux pas utiliser des delegates pour interagir avec les contrôles de la Form ?
Sinon, pourquoi utilises-tu une static ?
-- Delf
Jérémy Jeanson
Bonjour tout le monde,
Encore une petite histoire de thread ? ;)
Attention, il est vrai que le multi threading peut devenir une vrai usine à gaz, surtout si on veut jouer avec l'interface en parallèle. Pour lancer des opération asynchrones et faire remonter des information sur une interface graphique, il est 10 fois plus simple d'utiliser le BackGroundWorker... ce n'est pas parce que c'est un contrôle que l'on glisse sur son formulaire qu'il est moins performant, au contraire, il fait ce qu'il a à faire et il le fait bien.
Dans la même série, si effectivement Pierre veut manipuler des Threads, il y a une notion d'invocation de thread d'instanciation des contrôles qu'il faut maitriser à tout pris avant de partir dans l'aventure. En gros dans une methode qui doit utiliser un contrôle dans un thread autre que celui qui a servi à utiliser le thread, la méthode doit faire un test afin de déterminer si le thread à l'origine du contrôle doit être invoqué et qui relance la méthode en invoquant ce thread et en passant la méthode par un délégé. Par exemeple (attention c'est de tête, donc peut être un peu d'intellisence à ajouter ;))
private delegate void MonDelegate(); private void MaMethode() { // Tester le besoin d'invocation if(MonControl.InvokeRequired) { MonControl.Invoke(new MonDelegate(MaMethode)); } else { // pas besoin d'invocation dont on fait le traitement ici } }
avec des arguments ça donne : private delegate void MonDelegate(string arg1,string arg2); private void MaMethode(string arg1,string arg2) { // Tester le besoin d'invocation if(MonControl.InvokeRequired) { MonControl.Invoke(new MonDelegate(MaMethode,new Object[]{arg1,arg2}) )); } else { // pas besoin d'invocation dont on fait le traitement ici } } J'ai un petit doute sur l'écriture du passage d'arguments, mais ça doit être ça , normalement.
-- Jérémy JEANSON MCP http://www.jjeanson.fr
Bonjour tout le monde,
Encore une petite histoire de thread ? ;)
Attention, il est vrai que le multi threading peut devenir une vrai
usine à gaz, surtout si on veut jouer avec l'interface en parallèle.
Pour lancer des opération asynchrones et faire remonter des information
sur une interface graphique, il est 10 fois plus simple d'utiliser le
BackGroundWorker... ce n'est pas parce que c'est un contrôle que l'on
glisse sur son formulaire qu'il est moins performant, au contraire, il
fait ce qu'il a à faire et il le fait bien.
Dans la même série, si effectivement Pierre veut manipuler des Threads,
il y a une notion d'invocation de thread d'instanciation des contrôles
qu'il faut maitriser à tout pris avant de partir dans l'aventure. En
gros dans une methode qui doit utiliser un contrôle dans un thread autre
que celui qui a servi à utiliser le thread, la méthode doit faire un
test afin de déterminer si le thread à l'origine du contrôle doit être
invoqué et qui relance la méthode en invoquant ce thread et en passant
la méthode par un délégé. Par exemeple (attention c'est de tête, donc
peut être un peu d'intellisence à ajouter ;))
private delegate void MonDelegate();
private void MaMethode()
{
// Tester le besoin d'invocation
if(MonControl.InvokeRequired)
{
MonControl.Invoke(new MonDelegate(MaMethode));
}
else
{
// pas besoin d'invocation dont on fait le traitement ici
}
}
avec des arguments ça donne :
private delegate void MonDelegate(string arg1,string arg2);
private void MaMethode(string arg1,string arg2)
{
// Tester le besoin d'invocation
if(MonControl.InvokeRequired)
{
MonControl.Invoke(new MonDelegate(MaMethode,new Object[]{arg1,arg2}) ));
}
else
{
// pas besoin d'invocation dont on fait le traitement ici
}
}
J'ai un petit doute sur l'écriture du passage d'arguments, mais ça doit
être ça , normalement.
Attention, il est vrai que le multi threading peut devenir une vrai usine à gaz, surtout si on veut jouer avec l'interface en parallèle. Pour lancer des opération asynchrones et faire remonter des information sur une interface graphique, il est 10 fois plus simple d'utiliser le BackGroundWorker... ce n'est pas parce que c'est un contrôle que l'on glisse sur son formulaire qu'il est moins performant, au contraire, il fait ce qu'il a à faire et il le fait bien.
Dans la même série, si effectivement Pierre veut manipuler des Threads, il y a une notion d'invocation de thread d'instanciation des contrôles qu'il faut maitriser à tout pris avant de partir dans l'aventure. En gros dans une methode qui doit utiliser un contrôle dans un thread autre que celui qui a servi à utiliser le thread, la méthode doit faire un test afin de déterminer si le thread à l'origine du contrôle doit être invoqué et qui relance la méthode en invoquant ce thread et en passant la méthode par un délégé. Par exemeple (attention c'est de tête, donc peut être un peu d'intellisence à ajouter ;))
private delegate void MonDelegate(); private void MaMethode() { // Tester le besoin d'invocation if(MonControl.InvokeRequired) { MonControl.Invoke(new MonDelegate(MaMethode)); } else { // pas besoin d'invocation dont on fait le traitement ici } }
avec des arguments ça donne : private delegate void MonDelegate(string arg1,string arg2); private void MaMethode(string arg1,string arg2) { // Tester le besoin d'invocation if(MonControl.InvokeRequired) { MonControl.Invoke(new MonDelegate(MaMethode,new Object[]{arg1,arg2}) )); } else { // pas besoin d'invocation dont on fait le traitement ici } } J'ai un petit doute sur l'écriture du passage d'arguments, mais ça doit être ça , normalement.
-- Jérémy JEANSON MCP http://www.jjeanson.fr
Pierre
Delf wrote:
Pierre avait énoncé :
Je suis confronté au problème suivant. J'ai une forme qui lance des threads (socket client bloquant). J'associe un serveur à plusieurs bouton de ma forme. Sur chaque click de bouton, je lance un thread en passant le bouton en paramètre.
t = new Thread(new ParameterizedThreadStart(sendAndReceive)); t.Start(who);
Je passe le bouton en paramètre à ma forme dans une méthode genre
static void sendAndReceive(Object button)
Mon problème est que je veux récupérer ou mettre à jour des informations sur ma forme mais comme j'appelle une méthode statique, impossbile.
J'avais dèjà fait ce genre de chose mais sans passser de paramètre.
Bref je galère. Quelqu'un peut-il m'éclairer. Merci.
Ne vaut-il mieux pas utiliser des delegates pour interagir avec les contrôles de la Form ?
Sinon, pourquoi utilises-tu une static ?
-- Delf
Bonjour et merci, Pour le staitc, je n'ai pas le choix par ce que je passe un objet à mon Thread en utilisant ParameterizedThreadStart.
Le delegate ca serait pas mal sauf que je sais pas comment on renvoie un objet (string ou autre) quand on utilise le delegate qui me sert de callcack sur ma form. Je sais passer des paramètres, mettre à jour la form mais pas récupérer une information.
Delf wrote:
Pierre avait énoncé :
Je suis confronté au problème suivant. J'ai une forme qui lance des
threads (socket client bloquant). J'associe un serveur à plusieurs
bouton de ma forme.
Sur chaque click de bouton, je lance un thread en passant le bouton en
paramètre.
t = new Thread(new ParameterizedThreadStart(sendAndReceive));
t.Start(who);
Je passe le bouton en paramètre à ma forme dans une méthode genre
static void sendAndReceive(Object button)
Mon problème est que je veux récupérer ou mettre à jour des informations
sur ma forme mais comme j'appelle une méthode statique, impossbile.
J'avais dèjà fait ce genre de chose mais sans passser de paramètre.
Bref je galère. Quelqu'un peut-il m'éclairer. Merci.
Ne vaut-il mieux pas utiliser des delegates pour interagir avec les
contrôles de la Form ?
Sinon, pourquoi utilises-tu une static ?
--
Delf
Bonjour et merci,
Pour le staitc, je n'ai pas le choix par ce que je passe un objet à mon
Thread en utilisant ParameterizedThreadStart.
Le delegate ca serait pas mal sauf que je sais pas comment on renvoie un
objet (string ou autre) quand on utilise le delegate qui me sert de
callcack sur ma form. Je sais passer des paramètres, mettre à jour la
form mais pas récupérer une information.
Je suis confronté au problème suivant. J'ai une forme qui lance des threads (socket client bloquant). J'associe un serveur à plusieurs bouton de ma forme. Sur chaque click de bouton, je lance un thread en passant le bouton en paramètre.
t = new Thread(new ParameterizedThreadStart(sendAndReceive)); t.Start(who);
Je passe le bouton en paramètre à ma forme dans une méthode genre
static void sendAndReceive(Object button)
Mon problème est que je veux récupérer ou mettre à jour des informations sur ma forme mais comme j'appelle une méthode statique, impossbile.
J'avais dèjà fait ce genre de chose mais sans passser de paramètre.
Bref je galère. Quelqu'un peut-il m'éclairer. Merci.
Ne vaut-il mieux pas utiliser des delegates pour interagir avec les contrôles de la Form ?
Sinon, pourquoi utilises-tu une static ?
-- Delf
Bonjour et merci, Pour le staitc, je n'ai pas le choix par ce que je passe un objet à mon Thread en utilisant ParameterizedThreadStart.
Le delegate ca serait pas mal sauf que je sais pas comment on renvoie un objet (string ou autre) quand on utilise le delegate qui me sert de callcack sur ma form. Je sais passer des paramètres, mettre à jour la form mais pas récupérer une information.
Jérémy Jeanson
Bonjour Pierre,
Une solution courte et simple pour passer des parametre à un thread est de prendre le souci à l'envers. Au lieu de lancer une méthode et d'y passer des arguments tu peut te permettre de lancer dans un thread une méthode d'une classe contenant des proprités faisait office d'arguement
ex:
public class MaClasse { public String Arg1{get;set;}; public String Arg2{get;set;};
public void MaMethode() { // effectuer ici le traitement en utilisant arg1 et arg2 } }
Ensuite dans ton code appelant tu n'as qu' àç instancier ta classe puis lancer ta méthode:
MaClasse c = new MaClasse(){ Arg1="...", Arg2="..." }; Thread s = new Thread(c.MaMethode); s.Start();
Fonctionne parfaitement et très pratique si tu pense ajouter des arguments par la suite.
-- Jérémy JEANSON MCP http://www.jjeanson.fr
Bonjour Pierre,
Une solution courte et simple pour passer des parametre à un thread est
de prendre le souci à l'envers. Au lieu de lancer une méthode et d'y
passer des arguments tu peut te permettre de lancer dans un thread une
méthode d'une classe contenant des proprités faisait office d'arguement
ex:
public class MaClasse
{
public String Arg1{get;set;};
public String Arg2{get;set;};
public void MaMethode()
{
// effectuer ici le traitement en utilisant arg1 et arg2
}
}
Ensuite dans ton code appelant tu n'as qu' àç instancier ta classe puis
lancer ta méthode:
MaClasse c = new MaClasse(){ Arg1="...", Arg2="..." };
Thread s = new Thread(c.MaMethode);
s.Start();
Fonctionne parfaitement et très pratique si tu pense ajouter des
arguments par la suite.
Une solution courte et simple pour passer des parametre à un thread est de prendre le souci à l'envers. Au lieu de lancer une méthode et d'y passer des arguments tu peut te permettre de lancer dans un thread une méthode d'une classe contenant des proprités faisait office d'arguement
ex:
public class MaClasse { public String Arg1{get;set;}; public String Arg2{get;set;};
public void MaMethode() { // effectuer ici le traitement en utilisant arg1 et arg2 } }
Ensuite dans ton code appelant tu n'as qu' àç instancier ta classe puis lancer ta méthode:
MaClasse c = new MaClasse(){ Arg1="...", Arg2="..." }; Thread s = new Thread(c.MaMethode); s.Start();
Fonctionne parfaitement et très pratique si tu pense ajouter des arguments par la suite.
-- Jérémy JEANSON MCP http://www.jjeanson.fr
Pierre
Jérémy Jeanson wrote:
Bonjour Pierre,
Une solution courte et simple pour passer des parametre à un thread est de prendre le souci à l'envers. Au lieu de lancer une méthode et d'y passer des arguments tu peut te permettre de lancer dans un thread une méthode d'une classe contenant des proprités faisait office d'arguement
ex:
public class MaClasse { public String Arg1{get;set;}; public String Arg2{get;set;};
public void MaMethode() { // effectuer ici le traitement en utilisant arg1 et arg2 } }
Ensuite dans ton code appelant tu n'as qu' àç instancier ta classe puis lancer ta méthode:
MaClasse c = new MaClasse(){ Arg1="...", Arg2="..." }; Thread s = new Thread(c.MaMethode); s.Start();
Fonctionne parfaitement et très pratique si tu pense ajouter des arguments par la suite.
Et dire que je m'embête avec un objet ... C'est tellement astucieux. Merci.
Jérémy Jeanson wrote:
Bonjour Pierre,
Une solution courte et simple pour passer des parametre à un thread est
de prendre le souci à l'envers. Au lieu de lancer une méthode et d'y
passer des arguments tu peut te permettre de lancer dans un thread une
méthode d'une classe contenant des proprités faisait office d'arguement
ex:
public class MaClasse
{
public String Arg1{get;set;};
public String Arg2{get;set;};
public void MaMethode()
{
// effectuer ici le traitement en utilisant arg1 et arg2
}
}
Ensuite dans ton code appelant tu n'as qu' àç instancier ta classe puis
lancer ta méthode:
MaClasse c = new MaClasse(){ Arg1="...", Arg2="..." };
Thread s = new Thread(c.MaMethode);
s.Start();
Fonctionne parfaitement et très pratique si tu pense ajouter des
arguments par la suite.
Et dire que je m'embête avec un objet ... C'est tellement astucieux. Merci.
Une solution courte et simple pour passer des parametre à un thread est de prendre le souci à l'envers. Au lieu de lancer une méthode et d'y passer des arguments tu peut te permettre de lancer dans un thread une méthode d'une classe contenant des proprités faisait office d'arguement
ex:
public class MaClasse { public String Arg1{get;set;}; public String Arg2{get;set;};
public void MaMethode() { // effectuer ici le traitement en utilisant arg1 et arg2 } }
Ensuite dans ton code appelant tu n'as qu' àç instancier ta classe puis lancer ta méthode:
MaClasse c = new MaClasse(){ Arg1="...", Arg2="..." }; Thread s = new Thread(c.MaMethode); s.Start();
Fonctionne parfaitement et très pratique si tu pense ajouter des arguments par la suite.
Et dire que je m'embête avec un objet ... C'est tellement astucieux. Merci.