cs_Megafan
Messages postés389Date d'inscriptiondimanche 7 avril 2002StatutMembreDernière intervention23 septembre 2016
-
7 août 2008 à 15:53
cs_Megafan
Messages postés389Date d'inscriptiondimanche 7 avril 2002StatutMembreDernière intervention23 septembre 2016
-
8 août 2008 à 09:08
Bonjour,
J'ai besoin d'aide de la part des experts en .NET
le point de départ:
- Une Form avec une listbox (LstClients)
- Une Classe Serveur
-> Envoie un evenement lors de la connexion/deconnexion client (UpdateClients)
-> Une fonction GetClients qui renvoi un tableau de chaine avec les clients connectés.
code de ma form
' declaration du délégué
private delegate sub DelegateAfficheClients(byval TabClients() as string
' La vraie fonction d'affichage
private sub AfficheClients(byval TabCleints() as string)
lstClients.items.clear
....
end sub
' l'evenement déclenché par la classe serveur
Private sub Serveur_UpdateClients() Handles Serveur.UpdateClients
'ici je récupere mon Tableau de clients
Dim TabClients() as string=Serveur.GetClients()
' a ce niveau tout est bon mon tableau est correct
' maintenant j'invoke le delégué
me.invoke(new delegate DelegateAfficheClients(Addressof AfficheClients),TabClients)
et la des qu'un client se connecte...
***
Une exception de première chance de type 'System.Reflection.TargetParameterCountException' s'est produite dans System.Windows.Forms.dll
Nombre de paramètres incorrects.
****
Si je passe une string à la place du tableau de string (et que je modifie mon delegué bien sur), tout fonctionne bien
Quelqu'un à une idée ?
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 7 août 2008 à 19:11
Salut Megafan,
Déjà, tu as apparement fais des erreurs en nous tapant ton code :
me.invoke(new <strike>delegate</strike> DelegateAfficheClients(Addressof AfficheClients),TabClients)
Ensuite, l'argument ParamArray de la méthode Invoke doit être un tableau qui lui même contient tes arguments pour la délégué, et pas directement l'argument. C'est à dire que ton code devient :
Dim TabClients() as string=Serveur.GetClients()
Dim Args() As Object = {TabClients}
Me.Invoke(New DelegateAfficheClients(AddressOf AfficheClients), Args)
Chaque élément de Args est un argument de la délégué. Comme ta délégué n'a qu'un seul élément, ParamArray doit être un tableau avec 1 seul élément.
Ca fonctionne avec un String à la place du tableau, car "Salut" = {"Salut"}