2010-03-04 5 views
2

J'ai une classe backend qui doit déclencher un événement sans arguments. Le MethodInvoker a la signature désirée, mais il semble un peu étrange de l'utiliser dans une classe backend car il est défini dans System.Windows.Forms. Y a-t-il un autre délégué avec cette signature dans d'autres espaces de noms dans le .Net Framework? Si non, pensez-vous que je devrais définir un délégué avec cette signature moi-même ou utiliser MethodInvoker à la place?Utilisation de MethodInvoker dans une classe backend

Répondre

1

Si vous utilisez .NET 2.0:
Définissez votre propre type de délégué. Référencer un assemblage uniquement pour un type aussi simple n'est pas une bonne idée à mon avis.

De nombreux frameworks le font aussi. Même dans mscorlib (2.0), il y en a peut-être. Cependant, ils pourraient être dans des espaces de noms plus profonds dont l'utilisation pourrait être déroutante en combinaison avec votre classe.

Par conséquent, utilisez votre propre type de délégué en dehors de .NET 3.5.

1

Si vous pouvez utiliser .NET 3.5, il y a le délégué Action. Sinon, vous pouvez toujours déclarer que (+ toute autre Action ou Func délégués que vous voulez) dans une classe Utils ou similaires: déjà

public delegate void Action(); 
public delegate void Action<T1, T2>(T1 arg0, T2 arg1); 

public delegate TResult Func<T1, TResult>(T1 arg0); 
public delegate TResult Func<T1, T2, TResult(T1 arg0, T2 arg1); 

etc ...

Notez que .NET 2 comprend un void Action<T>(T arg) délégué, mais aucun des autres

+0

Malheureusement, j'utilise .NET Framework 2.0. Que pensez-vous généralement de l'utilisation de MethodInvoker dans une classe backend? – Ikaso

+3

Je créerais vos propres versions des délégués .NET 3.5 dans un espace de nom commun; De cette façon, il est facile de convertir en 3.5 quand vous le faites. Et MethodInvoker est explicitement conçu pour les invocations de threads de winforms; l'utiliser comme méthode générale semble conceptuellement erroné. – thecoop

+0

@thecoop pourriez-vous me diriger vers un exemple montrant une solution .Net 2? Merci – Fandango68

Questions connexes