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 :

communication inter methodes


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut communication inter methodes
    Bonjour tout le monde!

    J'ai un gros problème et je n'arrive pas à le résoudre , je me trouve dans cette situation car c'est ma première expérience en c# et que je ne dispose pas de beaucoup de temps pour trouver la solution à mon problème qui est le suivant:
    -j'ai une méthode qui reçois les données et les affiche dans un textbox (la réception se fait dans un thread)
    -une autre fonction d’envoi qui attend que la méthode receive trouve un caractère spécial dans les données de rection pour pouvoir déclencher l'envoie

    comment les deux méthodes peuvent -elles communiquer, je ne trouve pas d'exemple clair sur ce sujet.s'il vous plais si quelqu'un a une suggestion je l'accepterais avec grand plaisir!

  2. #2
    Invité
    Invité(e)
    Par défaut
    dans ta methode qui recoit les données tu peux soit appeler directement la methode d'envoi sur l'arrivé d'un caractere spécifique. Ou alors tu déclares un evenement que tu déclenches sur l'arrivé d'un des carcateres spécifique.

    Le fait d'utilisé un déclenchement par evenement ne bloquera pas la methode de réception de données, contrairement à l'autre solution.

  3. #3
    Membre habitué
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    Citation Envoyé par gcorbineau Voir le message
    dans ta methode qui recoit les données tu peux soit appeler directement la methode d'envoi sur l'arrivé d'un caractere spécifique. Ou alors tu déclares un evenement que tu déclenches sur l'arrivé d'un des carcateres spécifique.

    Le fait d'utilisé un déclenchement par événement ne bloquera pas la méthode de réception de données, contrairement à l'autre solution.
    Merci pour ta réponse rapide gcorbineau,
    en fait je viens de mettre ma fonction de réception dans une méthode indépendante et j'ai utilisé un premier delegate dans la méthode d'affichage sur le textbox et un autre delegate pour la vérification du caractère et déclenchement de l'envoie, et mon application s'est bloquée!!!
    donc je pense que je garde la méthode de réception pour l'affichage dans le text box dans laquelle je vais créer un événement qui se déclenche lorsque le caractère se trouve dans les données reçues et notifie à son tour la méthode d’envoi.
    avez vous s'il vous plais un exemple simple qui illustre cette situation ??

    Merci beaucoup pour votre aide

  4. #4
    Membre habitué
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    Citation Envoyé par samiti Voir le message
    Merci pour ta réponse rapide gcorbineau,
    en fait je viens de mettre ma fonction de réception dans une méthode indépendante et j'ai utilisé un premier delegate dans la méthode d'affichage sur le textbox et un autre delegate pour la vérification du caractère et déclenchement de l'envoie, et mon application s'est bloquée!!!
    donc je pense que je garde la méthode de réception pour l'affichage dans le text box dans laquelle je vais créer un événement qui se déclenche lorsque le caractère se trouve dans les données reçues et notifie à son tour la méthode d’envoi.
    avez vous s'il vous plais un exemple simple qui illustre cette situation ??

    Merci beaucoup pour votre aide
    par exemple une methode1 qui généré des nombres aléatoires (entre 0 et 10) si le nombre généré égale à 5 (par exemple) cette methode1 envoie une notification à une autre méthode 2 pour que celle si affiche un message bow par exemple MessageBox.show("le nombre généré égale à 5!"), et en attendant que méthode 1 trouve 5 , la méthode 2 ne fait rien.
    je suis preneur de toute suggestions.

  5. #5
    Membre émérite

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2011
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2011
    Messages : 487
    Par défaut
    Euh, j'ai un peu du mal à cerner ton problème la ...

    D'après ce que j'ai compris tu as deux manières de faire :

    private int Methode1_RandomBetween0and10()
    {
    int randomNumber = random.next(0,10);

    // Première méthode: Methode1 appelle Methode2 à la fin de son traitement
    Methode2_DisplayInMessageBox(randomNumber);
    }

    private void Methode2_DisplayInMessageBox(int i)
    {
    MessageBox.Show(i.ToString());
    }

    // Seconde méthode, une "metaméthode" appelle les 2 méthodes l'une après l'autre
    private void MetaMethode()
    {
    int randomNumber = Methode1_RandomBetween0and10();
    Methode2_DisplayInMessageBox(randomNumber);
    }
    Essaye de nous expliquer ce que ton code est censé faire et où tu bloques avec des exemples de code parce qu'en texte c'est vraiment pas clair :/
    Mon blog sur les technos .NET et Agile -> http://blog.developpez.com/maximepalmisano/

  6. #6
    Membre habitué
    Inscrit en
    Décembre 2011
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Décembre 2011
    Messages : 10
    Par défaut
    Citation Envoyé par MaximePalmisano Voir le message
    Euh, j'ai un peu du mal à cerner ton problème la ...

    D'après ce que j'ai compris tu as deux manières de faire :



    Essaye de nous expliquer ce que ton code est censé faire et où tu bloques avec des exemples de code parce qu'en texte c'est vraiment pas clair :/
    Merci beaucoup pour votre intérêt à mon problème, je vous explique mon problème:
    -j'ai une méthode 1 dans laquelle j'envoie un nombre variable de commandes cette méthode doit envoyer le première commande puis attendre un acquittement de la part de la partie qui reçoit , pour qu'elle puisse envoyer la deuxième commande.
    -une autre méthode 2 qui reçoit les données que la méthode 1 a envoyée , les affiche dans un text box, et au même temps elle cherche les caractères "ack".
    donc ce que je veux ,c'est que lorsque la méthode 2 trouve "ack" elle ordonne la methode 1 d'envoyer le message suivant.

    encore un détail: la méthode 1 (celle qui reçoit) elle se déclenche sur un événement: le changement du text box
    et la méthode 2 (celle qui envoie )elle se déclenche lorsque l'utilisateur appuis sur le bouton send.

    JE vous ai joint les deux méthode extraites de mon code.
    Merci pour prendre votre temps de les analyser j'avoue que vous êtes ma dernière chance de m'en sortir. et mes excuses pour la longueur du post.






    public bool contains ; // la varaible de test qui prend true si on trouve l'acquitement


    private void CAN0_Receive_textbox_TextChanged(object sender, EventArgs e) // fonction de reception
    {


    this.CAN0_Receive_textbox.SelectionStart = CAN0_Receive_textbox.Text.Length;
    this.CAN0_Receive_textbox.ScrollToCaret();


    CAN0_VAR_RX = CAN0_VAR_RX + ((double)CAN0_Receive_textbox.Text.Length / (double)1000);
    CAN0_RX_DATA = CAN0_VAR_RX.ToString();
    if (!(Application.OpenForms.OfType<CAN0_DataTransfer>().Count() > 0))
    {
    if ((user.clientSocket_CAN.Connected))
    {
    string returndata4;

    ThreadStart th = () =>
    {
    try
    {
    byte[] inStream = new byte[10025];
    int size = 0;
    size = user.clientSocket_CAN.Receive(inStream); // reception de donnée
    returndata4 = System.Text.Encoding.ASCII.GetString(inStream);

    contains = returndata4.Contains("ACK"); // là contains = true si on trouve "ack"
    UpdateTextBox_can2(returndata4);

    }
    catch
    { }
    };

    new Thread(th).Start();
    }
    }
    }
    delegate void OutputUpdateDelegate22(string data22);

    public void UpdateTextBox_can2(string data22)
    {
    if (CAN0_Receive_textbox.InvokeRequired)
    CAN0_Receive_textbox.Invoke(new OutputUpdateDelegate22(OutputUpdateCallback_can2),
    new object[] { data22 });
    else
    OutputUpdateCallback_can2(data22); //call directly
    }
    private void OutputUpdateCallback_can2(string data22)
    {
    CAN0_Receive_textbox.Text += data22;
    }
    public void UpdateTextBox_can(string data2)
    {
    if (CAN0_Receive_textbox.InvokeRequired)
    CAN0_Receive_textbox.Invoke(new OutputUpdateDelegate2(OutputUpdateCallback_can),
    new object[] { data2 });
    else
    OutputUpdateCallback_can(data2); //call directly
    }
    //fonction d'envoie des commandes
    private void CAN0_SendDatabutton_Click(object sender, EventArgs e)
    {
    int i;

    while (i < numLines)
    {
    if (i==0)
    user.SendData_ACK(user.clientSocket_CAN, textBox8.Text); // ceci est une dll qui contient la methode d'envoie (mise en fichier xml ect..)
    else if (contains)
    user.SendData_ACK(user.clientSocket_CAN, textBox8.Text);
    i++;
    }
    }

Discussions similaires

  1. Communication inter-threads: methode elegante?
    Par jc_isd dans le forum C++
    Réponses: 10
    Dernier message: 17/01/2007, 10h55
  2. [windows] Communication inter-processus
    Par litbos dans le forum Windows
    Réponses: 6
    Dernier message: 16/01/2007, 09h13
  3. Communication inter-fenêtre
    Par NeoMan dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/08/2005, 14h35
  4. communication inter-processus
    Par benoit70 dans le forum MFC
    Réponses: 1
    Dernier message: 14/04/2005, 09h55
  5. [MFC] communication inter exe
    Par Kevgeii dans le forum MFC
    Réponses: 2
    Dernier message: 06/01/2004, 16h47

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