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 attendre l'insertion d'une carte


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 90
    Points : 69
    Points
    69
    Par défaut Comment attendre l'insertion d'une carte
    Bonjour à tous,

    je viens vers vous pour un petit dilemme. Dans mon programme, sur l'écran d'accueil j'attends que l'utilisateur entre sa carte d'identité dans le lecteur pour commencer à traiter des informations, et pour ça j'ai une boucle do...while qui boucle à l'infini sur les différents écrans tant que l'utilisateur n'est pas arrivé au bout.

    Seulement je trouve cette méthode pas super propre (en plus de me poser des soucis, dans le code ci-dessous, si je ne met pas un messagebox dedans pour "stopper" la boucle, l'écran de départ ne se lance même pas.

    En autre solution j'avais également penser à un événement personnalisé qui détecterait lorsque la carte est insérée et retirée, mais je ne sais pas trop comment et si c'est possible de le faire, le seul élément que j'ai pour savoir si la carte est insérée étant un reader.IsCardPresent.

    Si quelqu'un avait une idée à me proposer pour me sortir de ce pétrin ça serait sympa

    Code actuel :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    private void F_RDV_Shown(object sender, EventArgs e)
            {
                do
                {
                    using (eIDReader reader = new eIDReader())
                    {
                        if (reader.IsCardPresent && step == 1)
                        {
                            eIDData data = reader.LoadData();
     
                            // Récupération des informations présente sur la carte d'identité
                            if (data != null && !string.IsNullOrEmpty(data.LastName)) nom = data.LastName;
                            if (data != null && !string.IsNullOrEmpty(data.FirstName)) prenom = data.FirstName;
                            if (data != null && !data.DateOfBirth.Equals(null)) dateNaiss = data.DateOfBirth;
                            if (data != null && !string.IsNullOrEmpty(data.Gender)) sexe = data.Gender;
                            if (data != null && !string.IsNullOrEmpty(data.NationalNumber)) niss = data.NationalNumber;
                            if (data != null && !string.IsNullOrEmpty(data.Street)) adresse = data.Street;
                            if (data != null && !string.IsNullOrEmpty(data.ZipCode)) codePostal = data.ZipCode;
                            if (data != null && !string.IsNullOrEmpty(data.Municipality)) localite = data.Municipality;
                            if (data != null && !data.Picture.Equals(null)) photo = data.Picture;
     
                            // Changement d'écran pour prévenir qu'on peut retirer la carte d'identité
                            tabControlPrincipal.SelectedTab = ut_BorneP2.Tab;
                            step++;
                        }
     
                        if (!reader.IsCardPresent)
                        {
                            switch (step)
                            {
                                case 2:
                                    tabControlPrincipal.SelectedTab = ut_BorneP4.Tab;
                                    break;
                                case 3:
                                    tabControlPrincipal.SelectedTab = ut_BorneP5.Tab;
                                    break;
                                case 4:
                                    tabControlPrincipal.SelectedTab = ut_BorneP6.Tab;
                                    break;
                                case 5:
                                    tabControlPrincipal.SelectedTab = ut_BorneP7.Tab;
                                    break;
                                case 6:
                                    tabControlPrincipal.SelectedTab = ut_BorneP8.Tab;
                                    break;
                                default:
                                    tabControlPrincipal.SelectedTab = ut_BorneP1.Tab;
                                    step = 1;
                                    break;
                            }
                        }
                    }
     
                    Thread.Sleep(2000);
                    MessageBox.Show("boucle");
                } while (!SorsDeLaBoucle);
            }

  2. #2
    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 195
    Points
    5 195
    Par défaut
    bonjour

    Peut-être simplement avec un Thread qui tourne et qui gère la carte et qui lève un évènement quand celle ci est inséré.

    Comme ça, coté IHM, tu seras abonné à cet évènement et tu pourras ainsi agir en conséquence dans ton logiciel...

    En tout cas, j'explorerais cette piste (soit via Thread, ou bien une Task Async par exemple).
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 90
    Points : 69
    Points
    69
    Par défaut
    J'y ai pensé également après avoir posté et j'ai potasser la dessus, voilà ce qu'il en est ressortis :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    private eIDReader reader;
     
    private void F_RDV_Shown(object sender, EventArgs e)
            {
                // Thread pour lire la carte
                Thread t = new Thread(new ThreadStart(() => AttachEIdEvents()));
                t.Start();
            }
     
            public void AttachEIdEvents()
            {
                if (reader == null)
                {
                    reader = new eIDReader();
                    reader.LoadDataCompleted += (sender, e) => CardInserted(e.Data);
                    reader.LoadDataAsync();
                }
            }
     
            public void DetachEidEvents()
            {
                if (reader != null)
                {
                    reader.Dispose();
                    reader = null;
                }
            }
     
            private void CardInserted(eIDData data)
            {
                // Récupération des informations présente sur la carte d'identité
                if (data != null && !string.IsNullOrEmpty(data.LastName)) nom = data.LastName;
                if (data != null && !string.IsNullOrEmpty(data.FirstName)) prenom = data.FirstName;
                if (data != null && !data.DateOfBirth.Equals(null)) dateNaiss = data.DateOfBirth;
                if (data != null && !string.IsNullOrEmpty(data.Gender)) sexe = data.Gender;
                if (data != null && !string.IsNullOrEmpty(data.NationalNumber)) niss = data.NationalNumber;
                if (data != null && !string.IsNullOrEmpty(data.Street)) adresse = data.Street;
                if (data != null && !string.IsNullOrEmpty(data.ZipCode)) codePostal = data.ZipCode;
                if (data != null && !string.IsNullOrEmpty(data.Municipality)) localite = data.Municipality;
                if (data != null && !data.Picture.Equals(null)) photo = data.Picture;
     
                this.Invoke(new MethodInvoker(delegate()
                {
                    tabControlPrincipal.SelectedTab = ut_BorneP2.Tab;
                }));
     
                step++;
     
                while (reader.IsCardPresent)
                {
                }
     
                DetachEidEvents();
     
                this.Invoke(new MethodInvoker(delegate()
                {
                    tabControlPrincipal.SelectedTab = ut_BorneP4.Tab;
                }));
     
                step++;
            }
    Ça fonctionne bien comme je le veux, le seul petit point noir qui me fait tiquer étant la boucle while complètement vide mais bon...

    Et aussi que si pour une raison X ou Y on annule la procédure avant la fin, la seconde carte n'est pas lue... Mais au moins j'avance petit à petit !

  4. #4
    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 195
    Points
    5 195
    Par défaut
    dans ta boucle, je te conseille un petit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Thread.Sleep(100); // petite attente de 100 ms

    voir de plus que 100 ms si tu n'as pas besoin de checker en permance... (sinon, ton thread de lecture va bouffer une partie de la CPU....
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 90
    Points : 69
    Points
    69
    Par défaut
    J'ai mis un thread.sleep d'une seconde, je pense qu'avec ça ça devrait aller. Merci du conseil

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 09/07/2013, 09h57
  2. Réponses: 0
    Dernier message: 21/04/2011, 19h53
  3. [Google Maps] insertion d'une carte et point "photo"
    Par Berno dans le forum APIs Google
    Réponses: 1
    Dernier message: 21/03/2011, 20h19
  4. Insertion dans une file d'attente MQSERIS
    Par a_karim_fr dans le forum z/OS
    Réponses: 3
    Dernier message: 13/10/2009, 18h14
  5. Accès au port 700h pour une carte d'interface
    Par haypo dans le forum Matériel
    Réponses: 3
    Dernier message: 07/11/2002, 11h30

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