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
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
oui mais derrière ça qu'est ce qu'il se cache ?
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# :
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
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() { // [...] } }
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; }
je pense que tu parles de l'évènement Click d'un objet Button non ?Envoyé par Goduak
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é.Envoyé par Goduak
non absolument pas mais c'est lié.Envoyé par Goduak
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
Pas de quoiEnvoyé par Goduak
![]()
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
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.Envoyé par Goduak
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
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 graphiquesEnvoyé par SaumonAgile
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.
Partager