2012-09-06 43 views
24

Trong mã bên dưới, tôi định nghĩa trình xử lý sự kiện và muốn truy cập biến tuổi và tên từ đó mà không khai báo tên và tuổi trên toàn cầu. Có cách nào tôi có thể nói e.agee.name không?Truyền đối số cho trình xử lý sự kiện

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

Tương tự như http://stackoverflow.com/questions/8644253/c-sharp-pass-parameter-to-eventhandler – codingbiz

+0

bản sao có thể có của [C# chuyển các tham số thừa vào trình xử lý sự kiện?] (Http://stackoverflow.com/câu hỏi/4215845/c-sharp-passing-extra-parameters-to-an-event-handler) – nawfal

Trả lời

57

Vâng, bạn có thể xác định các xử lý sự kiện như một biểu thức 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, đây là thanh lịch. khiến tôi thích C# hơn. – StanleyZ

+3

Giải pháp hoàn hảo. Điều này là sạch sẽ và mạnh mẽ. Cảm ơn –

+1

Thực sự, giải pháp rất thanh lịch! –

11

Nếu bạn muốn truy cập tên truy cập và độ tuổi, bạn nên tạo handler trong đó sử dụng EventArgs tùy chỉnh (kế thừa từ lớp EventArgs) , như sau:


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

và các đại biểu

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

Anh ấy đang sử dụng sự kiện Quá trình đã thoát mà khi được kích hoạt sẽ không bao giờ có thể vượt qua ProcessEventArgs đến trình xử lý của bạn –

Các vấn đề liên quan