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 un évènement?


Sujet :

C#

  1. #1
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut Attendre un évènement?
    Bonjour,

    ça paraît bizzare, mais je souhaite attendre qu'un événement se produise avant de vouloir continuer mon programme.

    La raison? Le temps d'initialisation d'un device externe qui me déclenche un événement, lorsque celui-ci est levé et uniquement dans ce cas, je continue le traitement.

    Je suis au courant que cela sera bloquant mais je n'ai pas d'autre choix...

    Comment faire?
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Tu ne peux pas mettre la suite du programme dans une méthode qui sera appelée lors de l'événement indiquant que le périphérique a été initialisé ?

  3. #3
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    void DebutDuProgramme()
    {
     Machin();
     ZeDevice.OnMachin += delegate
     {
       /* au cas où ce n'est pas sur le même thread */
       this.Invoke(new MethodInvoker(delegate
       {
          SuiteDuMachin();
       }));
     };
     
     /* ici on laisse le programme continuer (en supposant que ce soit une application avec une fenêtre) */
    }

    Mais ça ne fonctionne que si c'est bien une fenêtre et que l'application est lancée avec un Application.Run.

    S'il n'y a pas de fenêtre ou que tu veux faire une fonction bloquante qui attend que l'évènement soit appelé, tu peux aussi faire comme ceci :
    Code c# : 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
     
    void Truc()
    {
       Machin();
     
       bool continuer = false;
     
       ZeDevice.OnMachin += delegate
       {
          continuer = true;
       };
     
       while(!continuer)
       {
         System.Threading.Thread.Sleep(10);
       }
     
       SuiteDuMachin();
    }

    Sinon pour le delegate, c'est parfois mieux d'en faire une vrai fonction ... mais la flemme ...

  4. #4
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Citation Envoyé par StormimOn Voir le message
    Tu ne peux pas mettre la suite du programme dans une méthode qui sera appelée lors de l'événement indiquant que le périphérique a été initialisé ?
    Hum, je pense que je vais adapter mon programme et faire de la sorte, c'est une des seules manière vraiment efficace de faire je pense...

    En fait, j'attends que le GPS de mon PDA s'initialise et trouve un spot GPS valide, ce qui peut arriver au bout d'une minute comme aux bouts de deux heures

    @smiley, je procède déjà de la sorte, mais j'ai une application console et non graphique...


    de votre aide.
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  5. #5
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Citation Envoyé par Arnaud F. Voir le message
    En fait, j'attends que le GPS de mon PDA s'initialise et trouve un spot GPS valide, ce qui peut arriver au bout d'une minute comme aux bouts de deux heures
    Alors oui, il faut faire la suite du travail dans le delegate ou via une variable globale que tu surveilles de temps en temps.
    Ceci dit 2 heures pour initialiser un GPS, faut pas être pressé

  6. #6
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Citation Envoyé par smyley Voir le message
    Alors oui, il faut faire la suite du travail dans le delegate ou via une variable globale que tu surveilles de temps en temps.
    Ceci dit 2 heures pour initialiser un GPS, faut pas être pressé
    C'est surtout le temps de trouver un spot GPS valide qui prend du temps
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

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

Discussions similaires

  1. blocage d'une fonction en cours pour attendre un évènement
    Par lucyz dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 20/01/2009, 12h37
  2. Réponses: 3
    Dernier message: 12/07/2007, 02h40
  3. Réponses: 3
    Dernier message: 13/06/2007, 16h47
  4. Attendre un évènement
    Par ToTo13 dans le forum Langage
    Réponses: 6
    Dernier message: 08/06/2007, 13h03
  5. Attendre un évènement pour continuer l'exécution
    Par vinzzzz dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 22/11/2006, 21h42

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