2010-03-07 6 views
3

Je voudrais connaître la méthode Invoke (delegate). Je ne comprends pas pourquoi je n'ai pas besoin de spécifier d'arguments. Et si j'ai besoin d'eux ... J'espère que vous comprendrez mieux ce que je veux dire. MerciInvoke question de délégué

EventHandler a = new EventHandler(this.A); 
      Invoke(a); //where doest it take the arguments from? 

      a(); //does not work, missing arguments 

Répondre

6

Parce que Invoke est destiné à être utilisé sur Windows Forms et le motif des événements utilisés ici est bien spécifié, la méthode Invoke peut faire une supposition. En fait, it is documented on MSDN exactement ce qu'il fait, si vous essayez d'appeler un gestionnaire d'événements sans paramètres à l'aide Invoke:

Le délégué peut être une instance de EventHandler, auquel cas le paramètre de l'expéditeur contiendra ce contrôle, et le paramètre d'événement Contient EventArgs.Empty.

Vous pouvez, et devez, utiliser la surcharge de Invoke qui vous permet de spécifier les paramètres de votre délégué, afin de rendre plus explicite ce qui se passe. En outre, appeler Invoke sans le tableau de paramètres ne fonctionnera que pour les délégués de type EventHandler (ou, bien sûr, les délégués qui ne prennent aucun paramètre en premier lieu).

0

Je ne travaille pas avec EventHandlers mais j'utilise l'invocation dynamique sur les délégués. Normalement, pour moi au moins, le code finit par ressembler à ceci:

a.Invoke(new object[] { arg0, .... argn });