2010-10-18 11 views
4

Ci-dessous est un motif plutôt effrayant que j'utilise parfois comme un moyen paresseux de faire une invocation simple. Ce code me fait me sentir légèrement coupable, même si je ne sais pas pourquoi. Est-ce horrible? Raisonnable? Je vais exploser dans mon visage plus tard?Invocation récursive: style médiocre?

public void myMethod(object args) 
{ 
    if (InvokeRequired) 
    { 
     Invoke(new MethodInvoker(delegate 
     { 
      myMethod(args); 
     })); 
     return; 
    } 
    //Do Stuff 
} 
+0

Non, pas de problème avec ça. – leppie

+0

Je préfère de cette façon: Invoke (nouvelle action (myMethod)); // plus lisible je pense. – Homam

+0

@Homam: J'ai l'impression de faire les choses correctement lorsque le nom de la fonction 'Invoke' correspond si bien au type de paramètre' MethodInvoker'. – Brian

Répondre

8

Il s'agit d'un moyen très courant de vérifier qu'une méthode est exécutée à l'aide du contexte de synchronisation du thread de l'interface utilisateur. Il n'y a rien de mal à cela.

(Sur une note de côté, il est la convention .NET à utiliser pascal casing for methods, donc je changerais cela MyMethod. Étant donné que cette question concerne le style, je me sens cela vaut la peine de mentionner.)

+0

Je pense que [ici] (http://stackoverflow.com/a/34386795/18192) Eric Lippert dit que l'utilisation d'async de l'appelant est un meilleur style. Bien sûr, ce n'était pas une option au moment où vous avez posté cette réponse. – Brian

1

C'est bon. Tout en un seul endroit. Facile à comprendre.