¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
Delegado genérico EventHandler
Collapse the table of content
Expand the table of content

Delegado genérico EventHandler

Nota: este delegado es nuevo en la versión 2.0 de .NET Framework.

Representa el método que controlará un evento. El argumento de tipo genérico especifica el tipo de los datos de eventos generados por el evento.

Espacio de nombres: System
Ensamblado: mscorlib (en mscorlib.dll)

[SerializableAttribute] 
public delegate void EventHandler<TEventArgs> (
	Object sender,
	TEventArgs e
) where TEventArgs : EventArgs
J# admite el uso de métodos y tipos genéricos, pero no admite la declaración de métodos y tipos nuevos.
JScript no admite el uso de métodos y tipos genéricos.

Parámetros

sender

Origen del evento.

e

EventArgs que contiene los datos de eventos.

El modelo de evento de .NET Framework se basa en la existencia de un delegado de eventos que conecte un evento a su controlador. Para provocar un evento, se requieren dos elementos:

  • Delegado que hace referencia a un método que proporciona la respuesta al evento.

  • Clase que contiene los datos de eventos.

El delegado es un tipo que define una firma; es decir, el tipo del valor devuelto y los tipos de la lista de parámetros de un método. Puede utilizar el tipo delegado para declarar una variable que puede hacer referencia a cualquier método con la misma firma que el delegado.

La firma estándar del delegado de un controlador de eventos define un método que no devuelve ningún valor, cuyo primer parámetro es de tipo Object y hace referencia a la instancia que provoca el evento, y cuyo segundo parámetro se deriva del tipo EventArgs y contiene los datos de eventos. Si el evento no genera datos de eventos, el segundo parámetro es tan sólo una instancia de EventArgs. De lo contrario, el segundo parámetro es un tipo personalizado derivado de EventArgs y que proporciona los campos o propiedades necesarios para contener los datos de eventos.

EventHandler es un delegado predefinido que representa un método controlador de un evento, independientemente de si el evento genera datos de eventos o no. Si el evento no genera datos de eventos, sustituya el parámetro de tipo genérico por EventArgs; en caso contrario, utilice su propio tipo de datos de eventos personalizado para sustituir el parámetro de tipo genérico.

La ventaja de utilizar EventHandler es que no necesita codificar su propio delegado personalizado si el evento genera datos de eventos. Además, .NET Framework sólo necesita una implementación para poder utilizar EventHandler, independientemente del tipo de datos de eventos que utilice para sustituir el parámetro de tipo genérico.

Para asociar el evento al método que lo controlará, agregue una instancia del delegado al evento. Siempre que se produzca el evento, se llamará a su controlador, a menos que se quite el delegado.

Para obtener más información sobre los delegados del controlador de eventos, vea Eventos y delegados.

El ejemplo de código siguiente declara datos de eventos y un delegado de EventHandler genérico que utiliza estos datos y muestra cómo se provoca el evento.

// This example demonstrates the EventHandler<T> delegate.

using System;
using System.Collections.Generic;

//---------------------------------------------------------
public class MyEventArgs : EventArgs
{
    private string msg;

    public MyEventArgs( string messageData ) {
        msg = messageData;
    }
    public string Message { 
        get { return msg; } 
        set { msg = value; }
    }
}
//---------------------------------------------------------
public class HasEvent
{
// Declare an event of delegate type EventHandler of 
// MyEventArgs.

    public event EventHandler<MyEventArgs> SampleEvent;

    public void DemoEvent(string val)
    {
    // Copy to a temporary variable to be thread-safe.
        EventHandler<MyEventArgs> temp = SampleEvent;
        if (temp != null)
            temp(this, new MyEventArgs(val));
    }
}
//---------------------------------------------------------
public class Sample
{
    public static void Main()
    {
        HasEvent he = new HasEvent();
        he.SampleEvent += 
                   new EventHandler<MyEventArgs>(SampleEventHandler);
        he.DemoEvent("Hey there, Bruce!");
        he.DemoEvent("How are you today?");
        he.DemoEvent("I'm pretty good.");
        he.DemoEvent("Thanks for asking!");
    }
    private static void SampleEventHandler(object src, MyEventArgs mea)
    {
        Console.WriteLine(mea.Message);
    }
}
//---------------------------------------------------------
/*
This example produces the following results:

Hey there, Bruce!
How are you today?
I'm pretty good.
Thanks for asking!

*/

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter Edition

.NET Framework no admite todas las versiones de cada plataforma. Para obtener una lista de las versiones admitidas, vea Requisitos del sistema.

.NET Framework

Compatible con: 2.0

.NET Compact Framework

Compatible con: 2.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft