2011-12-27 15 views
72

पैरामीटर मैं निम्नलिखित EventHandler जो मैं एक पैरामीटर MusicNote संगीत जोड़ा हैपास eventhandler

myTimer.Elapsed += new ElapsedEventHandler(PlayMusicEvent(this, e, musicNote)); 

लेकिन मिल त्रुटि:

"Method name expected"

संपादित करें: इस मामले में मैं बस पास करता हूं एम विधि जिसमें यह कोड स्निपेट है, मैं टाइमर के अपने EventArgs को कैसे पास करूंगा?

+5

डुप्लिकेट प्रश्न पर उत्तर हालांकि चूसते हैं। यहां शीर्ष प्रतिक्रिया कैनोलिक जवाब होना चाहिए। –

उत्तर

183

Timer.Elapsed विशिष्ट हस्ताक्षर की विधि की अपेक्षा करता है (तर्क object और EventArgs के साथ)। छोटा संस्करण आप भी उपयोग कर सकते हैं:

myTimer.Elapsed += (sender, e) => PlayMusicEvent(sender, e, musicNote); 

myTimer.Elapsed += new ElapsedEventHandler((sender, e) => PlayMusicEvent(sender, e, musicNote)); 

संपादित करें: आप घटना पंजीकरण दौरान का मूल्यांकन अतिरिक्त तर्क के साथ अपने PlayMusicEvent विधि का उपयोग करना चाहते हैं, तो आप एक एडाप्टर के रूप में लैम्ब्डा अभिव्यक्ति का उपयोग कर सकते हैं

+1

धन्यवाद यह काम किया! मुझे ब्रैकेट के पहले सेट में प्रेषक और ई के नाम बदलना पड़ा क्योंकि वे युक्त विधि में समान थे। क्या आप कृपया मुझे बता सकते हैं कि वे क्या हैं? यानी प्रेषक के बीच क्या अंतर है, ई पहले ब्रैकेट में और दूसरे में क्या है? – Matt

+3

'(प्रेषक, ई) => PlayMusicEvent (प्रेषक, ई, संगीत नोट)' अज्ञात विधि है। पहले ब्रैकेट में मान वास्तविक पैरामीटर नाम और दूसरे ब्रैकेट में मान वास्तविक पैरामीटर के उपयोग हैं। इसे शून्य शून्य (var प्रेषक, var e) {PlayMusicEvent (प्रेषक, ई, संगीत नोट) के लिए संक्षिप्त रूप के रूप में सोचें; } 'जहां पैरामीटर नाम संदर्भ से अनुमानित हैं और' संगीत नोट 'स्थानीय चर से लिया जाता है। यह एक पंक्ति नई विधि बनाती है जो आपकी विधि का उपयोग करती है और इसे टाइमर की घटना के लिए हैंडलर के रूप में सेट करती है। – MagnatLU

+11

और इस 'eventHandler' को कैसे निकालें? '- =' काम नहीं करता है। – Houssni

3

यदि मैं आपकी समस्या को सही ढंग से समझता हूं, तो आप इसे पैरामीटर के रूप में पास करने के बजाय एक विधि बुला रहे हैं। निम्नलिखित का प्रयास करें:

myTimer.Elapsed += PlayMusicEvent; 

जहां

public void PlayMusicEvent(object sender, ElapsedEventArgs e) 
{ 
    music.player.Stop(); 
    System.Timers.Timer myTimer = (System.Timers.Timer)sender; 
    myTimer.Stop(); 
} 

लेकिन आप जहां अपने नोट को संग्रहीत करने के बारे में सोचने की जरूरत है।

संबंधित मुद्दे