2012-04-07 4 views
0

donc je suis assez nouveau à C# et j'ai rencontré ce problème: J'ai quelques méthodes qui appellent des délégués différents (avec des types d'arguments potentiellement différents). Cependant, ces délégués ne devraient pas être appelés immédiatement. Si le thread principal exécute un délégué, il doit être exécuté par la suite, un peu comme mettre en file d'attente le délégué et l'exécuter plus tard.
Maintenant, je pourrais probablement utiliser DynamicInvoke mais je ne sais pas si cela ralentira trop la file d'attente, outre que je connais le type de délégué et quel type de paramètre il devrait rechercher, donc ce n'est pas vraiment dépendante. S'il vous plaît aidez-moi si vous le pouvez, j'ai vraiment besoin d'une réponse.Appel des délégués plus tard aka. file d'attente de délégué

Merci tout le monde (qui répond)

+1

Je pense que vous pouvez le faire avec la bibliothèque réactive extensions: http://msdn.microsoft.com/en-us/data/gg577609 –

Répondre

1

Une des façons est en train de faire qui pourrait être l'utilisation de Tasks (à partir de .NET 4.0)

pouvez consulter sur

Asynchronous methods, C# iterators, and Tasks

comment pour créer des tâches de planification, comme, semble, dans votre cas.

Espérons que cela aide.

+0

Désolé, je ne peux pas utiliser 3.5 .net – Yamcha

+0

à ce point peut être plus approprié pourrait être en fait une option offerte dans le commentaire, donc [Extensions réactives] (http://msdn.microsoft.com/en-us/data/gg577609) – Tigran

+0

@ user1316459: il existe actuellement une autre solution, peut être plus approprié pour * programmer *, c'est un [Quartz.NET] (http://quartznet.sourceforge.net/). Jetez un coup d'oeil dessus, pourrait être plus utile pour vous. – Tigran

1

Cela fonctionnerait-il si, au lieu d'ajouter vos délégués directement, vous enveloppé eux dans les nouveaux délégués Action qui invoquent simplement les, en passant tous leurs paramètres? Par exemple:

List<Action> pending = new List<Action>(); 
pending.Add(() => MethodThatTakesNoParameters()); 
pending.Add(() => MethodThatTakesOneParameter(param)); 
pending.Add(() => MethodThatTakesThreeParameters(param1, param2, param3)); 
Questions connexes