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 fonctionne un button1_Click ?


Sujet :

C#

  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Par défaut Comment fonctionne un button1_Click ?
    Hello !

    Ma question est simple, je voudrais savoir comment C# gère l'évènement button1_Click.
    Est ce que c'est un thread particulier ?
    Est ce équivalent à un Invoke ou un BeginInvoke ou à un thread.Start ?

    Merci de vos réponses !

    Go

  2. #2
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    C'est un appel à une méthode, c'est tout.

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Par défaut
    oui mais derrière ça qu'est ce qu'il se cache ?

  4. #4
    Membre éclairé Avatar de adil_suptem
    Inscrit en
    Décembre 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 52
    Par défaut
    Deriere ca il y a une simple gestion d'évenements

  5. #5
    Membre Expert Avatar de davcha
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 258
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 258
    Par défaut
    Derrière ça, il y a les délégués, mais en C#, c'est quelque chose de relativement "caché".

    En gros, en C# :
    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
    class Program
    {
    	delegate void SomeDelegateThatHandleSomeEvent();
    	static event SomeDelegateThatHandleSomeEvent pf_SomeEvent;
     
    	static void Main(string [] args) {
    		SomeEvent += new SomeDelegateThatHandleSomeEvent(Program_SomeEvent);
    		// [...]
    		pf_SomeEvent();
    	}
     
    	static void SomeEvent() {
    		// [...]
    	}
    }
    Grosso modo la même chose en C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void (*pf_SomeEvent)(void) = 0;
     
    void SomeEvent(){
    	// [...]
    }
     
    int main(){
    	pf_SomeEvent = &SomeEvent;
    	// [...]
    	pf_SomeEvent();
    	return 0;
    }

  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
    Par défaut
    Citation Envoyé par Goduak
    Hello !

    Ma question est simple, je voudrais savoir comment C# gère l'évènement button1_Click.
    je pense que tu parles de l'évènement Click d'un objet Button non ?

    Citation Envoyé par Goduak
    Est ce que c'est un thread particulier ?
    oui c'est le thread des évènements Dotnet qui a la gestion de récupérer les messages windows (au sens système ) et de les propager dans le thread de la fenetre qui contient le composant auquel le message est destiné.

    Citation Envoyé par Goduak
    Est ce équivalent à un Invoke ou un BeginInvoke ou à un thread.Start ?
    non absolument pas mais c'est lié.
    Le Invoke permet d'appeler une méthode dans le thread créateur du composant graphique evitant ainsi les appel multi thread qui ne sont pas supporté par les composants dotnet. Le BeginInvoke fait la même chose mais de manière asynchrone pour le thread qui lance l'appel.
    Quant au Thread.Start c'est tout simplement le lancement d'un nouveau thread

    Citation Envoyé par Goduak
    Merci de vos réponses !

    Go
    Pas de quoi

  7. #7
    Membre averti
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Par défaut
    Merci de toutes vos réponses et particulièrement celle de dev01 qui est celle que j'attendais !!

    Cela étant, est-ce que dev01 tu pourrais regarder ce post dont je suis l'auteur :p car mon problème n'est toujours pas résolu et je pense que tu pourras avoir une idée la dessus : http://www.developpez.net/forums/sho...d.php?t=322701

    En fait j'essaie de faire en sorte que ma méthode Configure soit lancée depuis mon thread principal (Main) sans que l'appel se fasse dans le Main...
    Est ce possible déjà ?

    Si dans mon Main je lance cette méthode, mes événements SpeechRecoManager_CallApplication et SpeechRecoManager_Hypothesis fonctionnent très bien.

    Par contre si je passe par un événement ou par le lancement de cette méthode depuis un .Start dans mon Main, mes événements SpeechRecoManager_CallApplication et SpeechRecoManager_Hypothesis ne fonctionnent plus !

    La méthode Configure permettant de charger ma structure de données uniquement.

    As tu une idée du pb ?

    Merci !!

    Go

  8. #8
    Membre averti
    Inscrit en
    Février 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 53
    Par défaut
    Au passage, les méthodes Invoke, BeginInvoke, EndInvoke ne s'appliquent que principalement sur les éléments graphiques si je comprends bien.
    Je n'ai trouvé d'exemples que sur des éléments graphiques Control.

    Est ce bien le cas?

  9. #9
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Citation Envoyé par Goduak
    Au passage, les méthodes Invoke, BeginInvoke, EndInvoke ne s'appliquent que principalement sur les éléments graphiques si je comprends bien.
    Je n'ai trouvé d'exemples que sur des éléments graphiques Control.

    Est ce bien le cas?
    Je pense qu'il faut utiliser ces mécanismes pour gérer des événements entre plusieurs thread pour éviter des problèmes de concurrence.
    Peut-être que dev01 pourra confirmer.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  10. #10
    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
    Par défaut
    Citation Envoyé par SaumonAgile
    Je pense qu'il faut utiliser ces mécanismes pour gérer des événements entre plusieurs thread pour éviter des problèmes de concurrence.
    Peut-être que dev01 pourra confirmer.
    Effectivement les méthodes Invoke (et les dérivée asynchrones BeginInvoke) sont défini dans la classe Control c'est donc normal de ne les avoir que dans les compos graphiques

    Ces méthodes ont été crées afin de fournir un mécanisme simple d'appel de méthode dans le thread de création des controles afin d'éviter tout problème de multi threading sur les controles.

Discussions similaires

  1. [JSF] comment fonctionne <h:message> ?
    Par anitshka dans le forum JSF
    Réponses: 5
    Dernier message: 29/06/2005, 17h36
  2. Comment fonctionne TXmlDocumment ????
    Par almisuifre dans le forum C++Builder
    Réponses: 8
    Dernier message: 18/02/2005, 12h54
  3. comment fonctionne une interface graphique???
    Par elekis dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 27/10/2004, 23h10
  4. Comment fonctionne le ClassExplorer ?
    Par borisd dans le forum C++Builder
    Réponses: 7
    Dernier message: 30/09/2004, 17h44
  5. Comment fonctionne le CVS ?
    Par mathieu dans le forum CVS
    Réponses: 6
    Dernier message: 23/03/2004, 11h26

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