2010-10-26 7 views
3

Dans ma classe, j'ai une méthode statiqueRun méthode déléguée avec BeginInvoke

public static void DoWork(int param) ... 

Je veux courir cette méthode comme:

Form.BeginInvoke(DoWork, param); 

Est-ce possible cette opération?

J'ai essayé avec la classe MethodInvoker ... mais je ne veux pas définir le corps de la méthode en ligne. Y a-t-il un délégué générique? Ou connaissez-vous un autre moyen de l'appeler sans définir un objet délégué (private delegate void DoWorkDelegate(int param))?

Répondre

8

Vous devriez pouvoir utiliser:

form.BeginInvoke((Action<int>)DoWork, param); 

Comme une note de côté, MethodInvoker a l'avantage d'une manipulation spéciale - il peut invoquer que l'un avec-Invoke typé, plutôt que de réflexion Invoke - et peut-être plus offre surtout la vérification des arguments à l'avance; personnellement Je voudrais simplement utiliser:

form.BeginInvoke((MethodInvoker)delegate {DoWork(param);}); 
+0

Note: .NET 3.5 ou supérieur – Onkelborg

+0

@Onkelborg - non; En fait, ce * particulier * est 2.0: http://msdn.microsoft.com/en-us/library/018hxwa8(v=VS.80).aspx –

+0

Vous pourriez mentionner que BeginInvoke est une méthode d'instance. –