IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Comment passer une information entre des threads ?


Sujet :

C#

  1. #1
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut Comment passer une information entre des threads ?
    Bon je suis désolé pour cette question, mais je suis un poil perdu.

    Mon but c'est d'avoir un programme (pas de gui) qui lance un thread qui va communiquer sur le port seriel. Jusque la, tout va bien, le thread se lance, le main thread est pas bloqué. Seulement maintenant, j'aimerais que le main thread soit averti quand l'autre thread passe une "étape" (pour pouvoir mettre un message dans la console par exemple). Mon probleme c'est que les seuls exemples que j'ai trouvés disent que pour envoyer une donnée a un autre main, il "suffit" d'avor une variable publique ou on met la valeur, alors evidemment c'est pas ce que je veux, faudrait que mon main thread "scrute" cette variable, donc soit bloqué ( c'est en tout cas l'idée que je m'en fais).

    Les autres exemples que j'aie trouvé parlent de beginInvoke ou Invoke, mais tous les exemples sont donnés par rapport à une GUI, ce qui. pour le moment, ne me concerne pas.

    Est-ce que quelqu'un aurait un exemple simple pour faire ce que j'aimerais (en espérant que j'ai été assez clair...)

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2007
    Messages
    459
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 459
    Points : 553
    Points
    553
    Par défaut
    Tu peux utiliser un BackgroudWorker et t'abonner à l'événement ProgressChanged.

  3. #3
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Merci! je m'y mets de ce pas!

  4. #4
    Membre actif
    Avatar de Ecosmose
    Homme Profil pro
    Archi SI / Soft / Réseau / SCADA /Automate
    Inscrit en
    Janvier 2007
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Archi SI / Soft / Réseau / SCADA /Automate
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 170
    Points : 214
    Points
    214
    Par défaut
    As tu pensé à créer des événements 'faits maisons' (donc pas forcément associé aux événements de la GUI) des threads secondes ...puis tu inscrit ces événement aux méthodes du thraed principal ou dumoins de celui qui va ytraiter les evenements

    du style
    MaClasseFille.e += new eventHandler(MaclasseMere.maMethode())

  5. #5
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Alors je t'avouerais qu'en me baladant sur le net j'ai vu deux trois fois des choses du genre, mais n'ayant pas trouvé de tuto explicite et basique, j'ai pas poussé plus loin la recherche...

    ( faut aussi dire que je bosse dans un endroit un peu paumé ou y'a pas de librairie qui vende des livres sur le c# ...)

    Tant que j'y suis, j'en profite pour continuer un peu le thread, j'ai mis en place un background worker qui fonctionne vraiment bien c'etait inesperé..
    je me dis ljuste que je dois etre en train de faire un truc débile, ce que j'aimerais faire c'est, dans le cas ou ma fonction en background reussi, en lancer une suivante en background et, étant donné que ca a fonctionné la premiere fois, j'ai juste refais la meme chose une seconde fois... ce qui fait en gros que dans la fonction "RunWorkerCompleted" du premier background worker, j'en crée un suivant qui effectue la tache suivante.

    Au fond de moi j'ai vraiment l impression que c'est du travail de singe et que y'a une solution beaucoup plus simple, vous sauriez m'éclairer?

    merci!

  6. #6
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    2 choses avec les thread

    Soit tu dois enchainer des traitements "différents" et à ce moment là, la fin d'un thread qui lance un nouveau thread, c n'est pas abérrant

    Soit, tu lances le même traitement mais seulement une fois que le précédent est finie... et à ce moment là, autant ne travailler qu'avec un seul thread....

    et utiliser soit des booleens (ou des flags) pour savoir dans quel état tu es !

    Dans le cas 2, ton thread ne s'arrète jamais (sauf demande du père que tu dois gérer)...

    The Monz, Toulouse

  7. #7
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Ah tiens, donc étant donné que le traitement est différent, j'en conclus que je suis pas tant à l'ouest que ca

    c'est juste que je me disais (de nouveau, hein, j'y connais pas grand chose aux evennements) que je pourrais "abonner" mon DoWork à plus d'un evenement et espérer que ca se fasse séquentiellement (en l'abonnant uniquement si reussite de la fontction précédante), on sait jamais...

  8. #8
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 194
    Points
    5 194
    Par défaut
    salut

    oui, et tu pourrais aussi avec une liste de delegate contenant les traitements à faire et en fonction, choisir le bon delegate à appeler

    The Monz, Toulouse

    Edit:

    Finalement, ce que tu essayes de faire, ca ressemble à un WorkFlow... voir
    un automate... avec WF (.Net 3.0) , tu as des mécanismes pour le faire
    (sinon, implémenter un automate en C#, c'est assez simple)

  9. #9
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Mmmh,

    alors j'utilise .NET 2.0, je sais plus pourquoi, mais il y'avait une raison. Les workflow existent aussi en 2.0?

    Dans le cas positif, y'a t'il un tuto basique pour ca? (honte a moi, je pose la question sans avoir regardé dans les tutos du site)

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    En voilà un : http://jab.developpez.com/tutoriels/dotnet/wf/

    Personnellement je suis pas très fan de WF... je ne trouve pas que ça fasse gagner du temps, ni que ce soit très simple à utiliser. Mais bon, ça a l'avantage d'être "propre" d'un point de vue conception...

  11. #11
    Membre régulier Avatar de TheCaribouX
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2008
    Messages : 255
    Points : 122
    Points
    122
    Par défaut
    Nickel, je vais y jeter un coup d'oeil!

    Merci du conseil et pour votre aide, tout l'monde!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment passer une valeur entre activités ?
    Par TheBeginer dans le forum Android
    Réponses: 2
    Dernier message: 03/12/2014, 11h22
  2. Passer une information entre Eclipse et le AVD
    Par Nadou90 dans le forum Android
    Réponses: 1
    Dernier message: 24/04/2013, 16h39
  3. Réponses: 5
    Dernier message: 16/08/2011, 15h29
  4. [QThread] Comment attendre une information d'un thread dans le thread principal ?
    Par f.denis dans le forum Multithreading
    Réponses: 5
    Dernier message: 15/04/2010, 11h57
  5. Réponses: 6
    Dernier message: 14/12/2006, 11h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo