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 :

Attendre qu'un événement se soit produit avant de continuer une fonction


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 38
    Par défaut Attendre qu'un événement se soit produit avant de continuer une fonction
    Bonjour,
    j'aurais besoin de vos lumières !

    J'ai une formulaire avec 2 zones de texte: questionTextBox et answerTextBox
    Quand questionTextBox pose une question à l'utilisateur, je voudrais attendre qu'il tape sa réponse dans answerTextBox et selon sa réponse afficher juste ou faux dans questionTextBox et faire ça plusieurs fois.

    J'ai fait ce code mais ca bloque tout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
            AutoResetEvent waitHandle = new AutoResetEvent(false);
     
            private void buttonStart_Click(object sender, EventArgs e)
            {
                Questions();
            }
     
            public void Questions()
            {
                questionTextBox.Text = "en quelle année est né XXX?"
     
                // Wait for event completion
                waitHandle.WaitOne();
     
                // check answer
                // TBD
                questionTextBox.Text = "OK";
            }
     
            private void answerTextBox_TextChanged(object sender, EventArgs e)
            {
                string answ = answerTextBox.Text.ToString();
                waitHandle.Set();
            }
    Je n'ai pas mis le WaitHandle dans uen fonction mais au global pour être accessible partout. C'est une erreur ?
    Pouvez vous ml'indiquer comment je dois m'y prendre (j'aimerais ensuite récupérer la réponse tapée par l'utilisateur, c'est faisable avec un handler ? j'imagine un pointeur, mais c'est rarement utilisé en C#)

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    ça ressemble assez à un exercice que j'avais eu pendant mes études (apparemment on ne change pas les vieux classiques).
    Mais si c'est bien ça, tu ne décrit pas ton besoin réel, tu décris la manière que tu penses la bonne pour répondre au besoin.

    Si le but est d'avoir un questionnaire où l'utilisateur répond à des questions et que selon les réponses on affiche vrai ou faux et on donne une note à la fin, alors il faut avoir une autre approche.
    1) Changer le premier textbox par un Label (à moins de vouloir permettre à l'interrogé de changer la question)
    2) Utiliser le OnExit plutôt que le OnTextChanged (sinon tu ne sauras pas quand l'interrogé à fini de taper sa réponse), ou alors un bouton de validation (pour éviter qu'il ne tape malencontreusement sur TAB et que ça compte faux alors qu'il n'a pas fini de répondre).
    3) Bien entendu, préparer les questions et différentes réponses possibles à l'avance (ne pas tenir compte de la casse dans les réponses, et admettre plusieurs réponses comme bonnes genre 'St Jean', 'Saint Jean')

    Pour le reste tu devrais pouvoir t'en sortir

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 38
    Par défaut
    Merci popo, effectivement d'un label et d un onExit sur ma textBox est plus judicieux.
    Sur le WaitHandle, tu veux dire que ce n'est pas la solution ? Quel autre façon d'attendre que la textBox soit complétée est ce que tu suggères ?

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 38
    Par défaut
    J'ai aussi essayé d'utiliser async et await. Mais j'ai des soucis avec et j'ai l'impression que ce n'est aps la bonne méthode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            public async void MethodAsync()
            {
                computerQuestionLabel.Text = "en quelle année est né XXX?";
                string answer = await answerTextBox_TextChanged();
                // traiter l'info etc...
            }
     
            private string answerTextBox_OnExit()
            {
                string answ = answerTextBox.Text.ToString();
                return answ;
            }
    Si je fais ca, j'ai une erreur sur la ligne avec le await qui dit que "string does not contain a definition for GetAwaiter".

    -> Que me conseillez vous ?

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    ?

    si tu dois attendre que textbox answer textchanged pour faire quelque chose, il faut mettre le code dans cet event, pourquoi vouloir le mettre dans un autre ?

    si tu veux attendre que la réponse entière soit saisie, il faut un bouton pour que l'utilisateur puisse dire qu'il a fini d'écrire
    et là aussi le code va dans le bouton, aucune raison de mettre le code ailleurs

    donc pas besoin de resetevent ou d'async
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2017
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2017
    Messages : 38
    Par défaut
    En fait, je voudrais faire plusieurs questions d'affilées. Si je mets tout dans l'event, je vais confondre les réponses.
    C'est pour ca que je voudrais avoir un fonction qui s’interrompt, regarde la réponse, puis continue, s’interrompt, regarde la réponse, etc.

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

Discussions similaires

  1. [XL-2016] Attendre que la connection query soit terminée avant de poursuivre la code
    Par nonesofar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/11/2016, 14h08
  2. [PowerShell] Attendre la fin d'un process avant de continuer une boucle
    Par suchiwa dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 16/02/2011, 10h26
  3. Attendre qu'un recalcul soit effectué avant de continuer le code
    Par ANOVA dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/08/2010, 14h27
  4. Attendre la fin d'un script externe avant de continuer le script python
    Par Mistervanhalen dans le forum Général Python
    Réponses: 1
    Dernier message: 18/03/2009, 16h05
  5. Attendre qu'une fenetre soit fermée avant de continuer.
    Par parp1 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 29/05/2007, 17h43

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