Importante: tener mucho cuidado sobre la suscripción a un evento estática de los casos. Estático a estático está bien, pero una suscripción de un evento estático a un controlador de instancias es una gran forma (es decir, muy peligrosa) de mantener viva esa instancia para siempre. GC verá el enlace y no recopilará la instancia a menos que se desinscriba (o use algo como una WeakReference).
El patrón para la creación de eventos estáticos es lo mismo que los acontecimientos isntance, sólo con static
:
public static event EventHandler SomeEvent;
para hacer la vida más fácil (re comprobación nula), un truco útil es para agregar un controlador trivial:
public static event EventHandler SomeEvent = delegate {};
A continuación, puede invocar sin el cheque nulo:
SomeEvent(null, EventArgs.Empty);
Tenga en cuenta que debido a que las instancias de delegado son inmutables, y la eliminación de referencias es segura para subprocesos, nunca hay una condición de carrera aquí, y no es necesario bloquear ... quien sea que esté suscrito cuando se desvíe la invocación.
(ajuste para su propio evento-args, etc.). Este truco se aplica por igual a eventos de instancia.
Al leer su respuesta, indicó: "una suscripción de un evento estático a un controlador de instancias es una excelente manera de mantener viva esa instancia para siempre", supongo que esto no siempre será óptimo. Si, por ejemplo, estoy usando una clase estática para almacenar la configuración del formulario mientras se está ejecutando, esto no será tan malo ya que es estático y no puede tener varias copias. (Programador novato, perdona la mala terminología) – Josh
@Josh "la gran manera" se entendía como "una forma realmente peligrosa" - Lo he aclarado. Si solo tiene una suscripción, no es un gran problema, independientemente de la instancia estática frente a la instancia. La parte peligrosa viene cuando cada instancia se suscribe (digamos) a un evento estático, o un evento en un objeto de larga vida, y nunca cancela la suscripción. Hey presto: memoria obstruida. –
"suscripción de un evento estático a un manejador de instancias" ¿está escrito así a propósito? Creo que debería ser "suscripción de un controlador de instancias un evento estático" en su lugar. –