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 :

Méthode bloquante sur interface graphique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Par défaut Méthode bloquante sur interface graphique
    Bonjour à tous et à toutes,
    J'ai créé un clavier virtuelles 10 touches à l'aide de bouton et un mini écran (RichTextBox) pour afficher du texte. J'aimerais faire une méthode bloquante permettant de demander à l'utilisateur de taper quelques choses sur le clavier puis valider. A la validation le programme me donne ce que j'ai tapé. L'autre difficulté est que cette méthode peut être appelé par plusieurs autres threads, elle doit biensur être bloqué pendant qu'un thread l'utilise. Pour ça j'ai pensé à des mutex.

    la méthode que j'aimerais avoir est :

    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
     
    Mutex m = new Mutex();
    Object synchroButton = new Object();
    Int number;
     
    public int AskNumber(){
            m.WaitOne();
     
            //nombre à retourner
            number = 0;
     
            //initialise le bouton validation
            _buttonOKPushed = false;
     
            //on bloque tant que le bouton ok n'est pas validé
     
            while (!_buttonOKPushed)
                Monitor.Wait(synchroButton);
     
            m.Release();
            return number;
    }
     
    ///en background j'ai tous les event sur boutons qui s'occupe de modifier la valeur de number
    Je vois parfaitement ce qui cloche mais je n'arrive pas à empêcher le thread principal de se bloqué. J'ai essayer le WaitCallBack mais si j'attend la fin du traitement avec AutoResetEvent ça bloque.
    J'avoue que je n'ai pas essayer de le lancer dans un thread à part mais je ne vois pas pourquoi ça fonctionnerait.

    Si vous pouvez me conseiller ça m'aiderait beaucoup.

    Cordialement,
    Folkene

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    _buttonOKPushed est modifié par qui et où ?

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut methode bloquante
    bonjour
    arnard a raison pour savoir a qui appartient _buttonOKPushed.
    il est clair qu'il doit appartenir à la methode bloquante.
    de plus cette methode doit s'executer dans un thread separe,saisir et donnees et afficher ses donnees dans un form qui est cree dans son thread, pas dans le thread principal .

  4. #4
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 26
    Par défaut
    Citation Envoyé par Arnard Voir le message
    _buttonOKPushed est modifié par qui et où ?
    Le boolean _buttonOKPushed est modifié dans une méthode extern suite à un Event onClick sur le bouton OK. Dans cette méthode je change la valeur _buttonOKPushed à true et je fait un Monitor.PurleAll(_synchronizeButton).

    Le problème avec le thread est que je vais devoir attendre la fin de son exécution pour renvoyer le résultat. Si je fait ça je reste bloqué, puisque l'IHM est figée.

    Merci tout de même pour vos réponse.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2006
    Messages
    1 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 627
    Par défaut
    J'ai du mal à voir tes threads ui et threads traitement, on pourrait avoir une version light de cela, histoire de pouvoir se dérouler le traitement ?

    Sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     while (!_buttonOKPushed); //Avec _buttonOKPushed marqué comme volatile
                //Monitor.Wait(synchroButton);
    AskNumber() est bien appelé dans un nouveau thread à chaque fois ??

Discussions similaires

  1. [Débutant] Aide sur Interface graphique
    Par hakoumca dans le forum Interfaces Graphiques
    Réponses: 4
    Dernier message: 27/05/2012, 03h15
  2. lecture des données saisie sur interface graphique
    Par tulipe04 dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 24/03/2011, 09h17
  3. Bienvenue sur le forum Interfaces Graphiques en Java - règles à respecter par tous
    Par christopheJ dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 31/05/2009, 15h50
  4. Réponses: 8
    Dernier message: 16/04/2007, 11h05
  5. [C#] Aide sur méthode bloquante
    Par ArChAnGe76 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 22/12/2005, 18h32

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