2012-09-06 16 views
24

En el siguiente código, estoy definiendo un controlador de eventos y me gustaría tener acceso a la variable de edad y nombre sin tener que declarar el nombre y la edad de manera global. ¿Hay alguna manera de decir e.age y e.name?Pasando argumentos a un manejador de eventos

void Test(string name, string age) 
{ 
    Process myProcess = new Process(); 
    myProcess.Exited += new EventHandler(myProcess_Exited); 
} 

private void myProcess_Exited(object sender, System.EventArgs e) 
{ 
    // I want to access username and age here. //////////////// 
    eventHandled = true; 
    Console.WriteLine("Process exited"); 
} 
+0

Igual que http://stackoverflow.com/questions/8644253/c-sharp-pass-parameter-to-eventhandler – codingbiz

+0

posible duplicado de [C# pasando parámetros adicionales a un controlador de eventos?] (Http://stackoverflow.com/questions/4215845/c-sharp-passing-extra-parameters-to-a-event-handler) – nawfal

Respuesta

57

Sí, se podría definir el controlador de eventos como una expresión lambda:

void Test(string name, string age) 
{ 
    Process myProcess = new Process(); 
    myProcess.Exited += (sender, eventArgs) => 
    { 
     // name and age are accessible here!! 
     eventHandled = true; 
     Console.WriteLine("Process exited"); 
    } 

} 
+4

wow, esto es elegante. me hace como C# más. – StanleyZ

+3

Solución perfecta. Esto es limpio y poderoso. Gracias –

+1

¡Solución realmente muy elegante! –

11

Si desea acceder nombre de usuario y la edad, se debe crear manipulador que utiliza EventArgs personalizados (heredado de la clase EventArgs) , como siguiente:


public class ProcessEventArgs : EventArgs 
{ 
    public string Name { get; internal set; } 
    public int Age { get; internal set; } 
    public ProcessEventArgs(string Name, int Age) 
    { 
    this.Name = Name; 
    this.Age = Age; 
    } 
} 

y el delegado

public delegate void ProcessHandler (object sender, ProcessEventArgs data); 
+3

Está usando el evento Exited de Process que, cuando se active, nunca podrá pasar ProcessEventArgs a su controlador –

Cuestiones relacionadas