Передача аргументов в обработчик событий
В приведенном ниже коде я определяю обработчик событий и хотел бы получить доступ к переменной age и name из нее без объявления имени и age в глобальном масштабе. Есть ли способ, которым я могу сказать e.age
а также e.name
?
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");
}
2 ответа
Решение
Да, вы можете определить обработчик событий как лямбда-выражение:
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");
}
}
Если вы хотите получить доступ к имени пользователя и возрасту, вы должны создать обработчик, который использует пользовательские EventArgs (унаследованные от класса EventArgs), например:
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;
}
}
и делегат
public delegate void ProcessHandler (object sender, ProcessEventArgs data);