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

Windows Forms Discussion :

[C#] Pb thread Main


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Points : 24
    Points
    24
    Par défaut [C#] Pb thread Main
    Salut!

    Je rencontre un problème de dingue...

    Mon programme fonctionne lorsque je place ma ligne de code au sein de l'évènement du clic de souris.

    Par contre si je mets cette même ligne de code dans un event que je créé, la ligne de code est exécutée EXACTEMENT comme avant mais mon programme ne marche pas !!

    Voici les lignes essentielles :

    CAS 1 : Exemple qui marche :
    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
     
            public Fenetre()
            {
                InitializeComponent();
            }
     
            /// <summary>
            ///     The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                SpeechRecoManager.CallApplication += new SpeechEventHandler(SpeechRecoManager_CallApplication);
                SpeechRecoManager.Hypothesis += new SpeechEventHandler(SpeechRecoManager_Hypothesis);
     
                fenetre = new Fenetre();
                Application.Run(fenetre);
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                Configuration("application");
            }

    CAS 2 : Exemple qui "ne marche pas" :
    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
     
            public Fenetre()
            {
                InitializeComponent();
            }
     
            /// <summary>
            ///     The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                SpeechRecoManager.CallApplication += new SpeechEventHandler(SpeechRecoManager_CallApplication);
                SpeechRecoManager.Hypothesis += new SpeechEventHandler(SpeechRecoManager_Hypothesis);
                Message.Request += new ConfigureAppEventHandler(Request);
     
                fenetre = new Fenetre();
                Application.Run(fenetre);
            }
     
            public static void Request(string app, string id)
            {
                Configuration("application");
            }

    La méthode Configuration permet de créer une structure de donnée.
    Elle est rigoureusement identique dans les 2 cas.

    Y a-t-il une particularité des Windows Form sur la gestion d'event ou même de thread ?


    D'avance, merci de vos nombreuses réponses !

    Go

  2. #2
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Ca veut dire quoi "mon programme ne marche pas" en langage de développeur ?

    Tu colles un handler d'évènement avant le Application.Run ? curieux...

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Points : 24
    Points
    24
    Par défaut
    En fait au meme endroit que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Message.Request += new ConfigureAppEventHandler(Request);
    j'active d'autres événements qui permettent la reconnaissance vocale (SAPI)
    et qui fonctionne lorsque je suis dans le CAS 1.

    Par contre dans le CAS 2 ils ne fonctionnent pas.

    où aurais tu mis les eventhandler ?

  4. #4
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par Goduak
    où aurais tu mis les eventhandler ?
    En winform, on fait de la programmation évènementielle.
    Le programme à proprement parler commence donc au moment où la fenêtre principale est créé.
    J'aurai donc collé mes handlers très logiquement au début de mon programme : dans le constructeur de Fenetre.

    Il faut savoir que la pompe à messages, coeur de la programmation évènementielle, n'est lancée que lorsque tu as fait ton Application.Run.
    Après ça dépend comment fonctionne ta classe Message.

    Sinon t'as pas répondu à la question : ça veut dire quoi "mon programme ne fonctionne pas" en langage de développeur.

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Points : 24
    Points
    24
    Par défaut
    Ok merci pour le conseil.

    Pour en revenir à la question principale, quand je dis que "mon programme ne marche pas" c'est qu'il démarre, il me créé ma structure de données grâce à la méthode Configuration ( CAS 1 et CAS 2 ) mais les événements de reconnaissance vocale ne fonctionnent pas dans mon CAS 2.

    Ce qui est troublant c'est que le code est presque identique et que le CAS 1 fonctionne très bien...

  6. #6
    Rédacteur
    Avatar de dev01
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 451
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 451
    Points : 6 017
    Points
    6 017
    Par défaut
    Salut .

    Plusieur questions :

    - C'est quoi la classe Message ?
    - Tu es sur que l'vènement Request est levé ?

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Points : 24
    Points
    24
    Par défaut
    L'événement Request est bien levé. Ca marche bien ça.

    Ma classe Message gère la réception de messages reçus par Socket.
    Selon le message reçu elle va déclencher l'événement Request.

    Je suis en ligne si tu as des questions. ^^

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Points : 24
    Points
    24
    Par défaut
    Le fait que Configure ne soit pas exécuté dans le Thread principale du Main pose problème...
    Y a-t-il un moyen de faire comme si Configure était exécutée dans le Thread du Main ?
    (sans mettre Configure directement dans le Main bien évidemment)

  9. #9
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par Goduak
    mais les événements de reconnaissance vocale ne fonctionnent pas dans mon CAS 2.
    mmmmm... tu te fous de moi ?
    Ca veut dire quoi "ne fonctionne pas" ?
    Ils ne sont pas appelés ? Ils lancent une exceptions ? Y'a windows qui reboote ?

  10. #10
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    Citation Envoyé par Goduak
    Le fait que Configure ne soit pas exécuté dans le Thread principale du Main pose problème...
    Y a-t-il un moyen de faire comme si Configure était exécutée dans le Thread du Main ?
    (sans mettre Configure directement dans le Main bien évidemment)
    Le thread principal est celui de ta Form "Fenetre".
    Essaye de mettre ton handler à cet endroit là.
    que se passe-t-il ? (en langage de développeur stp)

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Précisions
    Je travaille avec Goduak sur ce projet.

    Ce qu'il essaie d'expliquer est qu'on créé grace à Microsoft speech API un vocabulaire en chargeant la grammaire relative à l'application.

    Quand le chargement du vocabulaire est appelé dans le thread de la fenetre, c'est à dire dans le thread appelant "Application.Run(new Fenetre());", les événements de reconnaissance, c'est à dire que quand on parle dans le micro, sont bien déclenchés.

    Par contre, quand on charge le vocabulaire dans un autre thread que celui de la fenetre, ensuite, quand on parle dnas le micro, il ne se passe rien, aucun événement n'est déclenché.

    Pourtant dans les deux cas les memes appels sont faits et Speech API ne renvoit pas d'erreur ...

    Est-ce que vous auriez une idée d'où ce probleme pourrait venir ?? Et sinon, est ce que vous auriez une piste ??

    Merci d'avance

  12. #12
    Membre expérimenté Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Points : 1 379
    Points
    1 379
    Par défaut
    J'ai l'impression très nette qu'il n'y a pas de problème au niveau de l'API, mais plutôt au niveau de votre conception.

    En programmation évènementielle, c'est normal que toute la couche évènementielle passe par le thread principal. Savez-vous ce qu'est une pompe à messages ?

    Tout étant donc normal, reste-t-il un problème, et si oui lequel ?
    Je ne comprend pas pourquoi vous voulez déplacer un code qui fonctionne.

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Le probleme est qu'on souhaite charger le vocabulaire de maniere asynchrone par rapport à la fenetre.

    Plusieurs applications se connectent à notre programme via sockets pour disposer des fonctionnalités de reconnaissance vocale qui sont centralisées dans notre programme.

    Mais de toutes facons c'est bon j'ai réussi à forcer le chargement du vocabulaire à se faire dans le thread de la fenetre grace à la fonction Invoke.

    Merci quand meme

Discussions similaires

  1. Exception in thread main ! (Java+MySQL)
    Par condor_01 dans le forum Général Java
    Réponses: 12
    Dernier message: 24/04/2008, 09h25
  2. Exception in thread "main" java.lang.NullPointerException
    Par yrlac dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 24/05/2007, 17h19
  3. erreur:Exception in thread main
    Par milsum dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 26/07/2006, 15h34
  4. [Classpath]Exception in thread "main" NoClassDefFound
    Par let_me_in dans le forum Général Java
    Réponses: 24
    Dernier message: 24/01/2006, 20h28
  5. Exception in thread "main" java.lang.ArrayIndexOut
    Par Poseidon62 dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 04/11/2005, 01h38

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