2012-09-06 25 views
24

Nel codice seguente, sto definendo un gestore di eventi e desidero accedere all'età e alla variabile nome da quella senza dichiarare il nome e l'età a livello globale. C'è un modo per dire e.age e e.name?Passaggio di argomenti a un gestore eventi

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

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

+0

possibile duplicato di [C# che passa parametri aggiuntivi a un gestore di eventi?] (Http://stackoverflow.com)/questions/4215845/c-sharp-passing-extra-parameters-to-an-event-handler) – nawfal

risposta

57

Sì, è possibile definire il gestore di eventi come espressione 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, questo è elegante. mi rende come C# di più. – StanleyZ

+3

Soluzione perfetta. Questo è pulito e potente. Grazie –

+1

Soluzione davvero elegante! –

11

Se si desidera accedere il nome utente e l'età, è necessario creare gestore che utilizza EventArgs personalizzati (ereditati dalla classe EventArgs) , come segue:


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; 
    } 
} 

e il delegato

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

Sta usando l'evento di processo Exited che, una volta attivato, non sarà mai in grado di passare ProcessEventArgs al gestore –

Problemi correlati