2012-09-06 9 views
24

아래 코드에서 이벤트 처리기를 정의하고 있으며 전역 적으로 이름과 나이를 선언하지 않고 나이와 이름 변수에 액세스하려고합니다. e.agee.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"); 
} 
+0

[C#에서 이벤트 처리기에 추가 매개 변수를 전달할 수 있습니까?] (http://stackoverflow.com)와 동일한 http://stackoverflow.com/questions/8644253/c-sharp-pass-parameter-to-eventhandler – codingbiz

+0

과 중복됩니다./questions/4215845/c-sharp-passing-extra-parameters-to-an-event-handler) – nawfal

답변

57

예, 람다 표현식으로 이벤트 핸들러를 정의 할 수 있습니다 : 당신은 사용자 이름과 나이를 액세스하려면

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

와우, 이것은 우아합니다. 나를 C# 더 좋아하게 만듭니다. – StanleyZ

+3

완벽한 솔루션입니다. 이것은 깨끗하고 강력합니다. 감사합니다 –

+1

정말, 아주 우아한 솔루션! –

11

, 당신은 핸들러를 작성해야합니다 사용자 정의는 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); 
+3

그는 프로세스의 Exited 이벤트를 사용하여 트리거되었을 때 결코 ProcessEventArgs를 처리기에 전달할 수 없습니다. –