2012-09-06 19 views
24

Aşağıdaki kodda, bir olay işleyicisini tanımlıyorum ve adı ve yaşını küresel olarak bildirmeden yaş ve ad değişkenine erişmek istiyorum. e.age ve e.name deme yollarım var mı?Bir olay işleyicisine bağımsız değişkenleri iletme

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

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

+0

ile aynı olası [C# bir olay işleyicisine fazladan parametreler geçirme?] (Http://stackoverflow.com/questions/4215845/c-keskin geçişli-extra-parameters-to-an-event-handler) – nawfal

cevap

57

Evet, bir lambda ifadesi olarak olay işleyicisi tanımlayabiliriz: Eğer kullanıcı adı ve yaşı erişmek istiyorsanız

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

vay, bu zarif. beni C# daha fazla yapar. – StanleyZ

+3

Mükemmel çözüm. Bu temiz ve güçlü. Teşekkürler –

+1

Gerçekten çok şık bir çözüm! –

11

, sen işleyicisi oluşturmak gereken özel EventArgs kullanır (EventArgs sınıfından miras alınan) aşağıdaki gibi:


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

ve temsilci

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

Tetiklendiğinde, ProcessEventArgs öğesini hiçbir zaman işleyicinize iletemeyecek olan Çıkış Süresini kullanır. –

İlgili konular