2011-09-17 10 views
9

Cuando queremos pasar datos a un suscriptor de eventos, usamos EventArgs (o CustomEventArgs) para esto.Tipo de EventHandler sin eventos args

.Net proporciona una construcción en tipo EventHandler que utiliza como parámetro una instancia de la clase EventArgs que también está incorporada.

¿Qué pasa con los casos en que, cuando tengo que notificar a un suscriptor que se ha terminado alguna acción, por ejemplo, la búsqueda ha terminado? Ni siquiera quiero usar EventArgs, que no contendrá nada.

¿Existe un tipo de compilación en el tipo para indicar otra clase, sin la necesidad de utilizar EventArgs vacíos?

Respuesta

6

que puede hacer un par de cosas:

  1. Youse su evento normal con manejador de sucesos y la clase básica EventArg - asegurarse de que está vacío pero hace daño?
  2. crea su propio delegado y utilizar esto con event MyDelegateWithoutParams MyEvent;
  3. utilizar el Observador-Patrón con IObservable lugar
  4. dejar que los clientes pasen una acción ¿y llamar a esta acción

espero una de estas opciones es de tu agrado Yo uso 1 y 4 para este tipo de situación (4 sobre todo si va a haber una sola "oyente"

PS:. Supongo 2 no se adaptará a la .net framework guidelines así que tal vez esta no es la mejor idea;)

+0

Número 4 es una buena idea en mi caso. Gracias. –

7

si usa delegates llano seguramente puede hacer lo que quiera, pero si usa events creo que lo mejor es apegarse a la norma y siempre tener object emisor y e.

si realmente no sabe qué pasar disparando esos eventos desde su propio código, simplemente pase EventArgs.Empty como segundo parámetro.

10

Realmente le aconsejaría que use el patrón estándar de EventHandler aquí y simplemente pase EventArgs.Empty; sin embargo, usted puede use Action como un tipo de evento de lo que realmente desea, es inusual.

2

Use acciones (por debajo de respuesta copiada de https://stackoverflow.com/a/1689341/1288473):

declarando:

public event Action EventWithoutParams; 
public event Action<int> EventWithIntParam; 

de llamada (que todavía quieren realizar la comprobación nula):

EventWithoutParams(); 
EventWithIntParam(123); 
+1

Esta es la respuesta más directa a la pregunta del OP – Justas

Cuestiones relacionadas