2012-09-06 40 views
24

पर तर्क पास करना नीचे दिए गए कोड में, मैं एक ईवेंट हैंडलर को परिभाषित कर रहा हूं और वैश्विक स्तर पर नाम और आयु घोषित किए बिना उस उम्र और नाम चर का उपयोग करना चाहता हूं। क्या कोई तरीका है कि मैं 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"); 
} 
+0

जैसे ही http://stackoverflow.com/questions/8644253/c-sharp-pass-parameter-to-eventhandler – codingbiz

+0

किसी ईवेंट हैंडलर को अतिरिक्त पैरामीटर पारित करने के संभावित डुप्लिकेट? [Http://stackoverflow.com/प्रश्न/4215845/सी-तेज-गुजरने-अतिरिक्त-पैरामीटर-टू-ए-इवेंट-हैंडलर) – 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

वाह, यह सुरुचिपूर्ण है। मुझे सी # और अधिक पसंद करता है। – 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

वह प्रक्रिया की मौजूदा घटना का उपयोग कर रहा है, जो ट्रिगर होने पर कभी भी आपके हैंडलर को ProcessEventArgs पास नहीं कर पाएगा –