2011-01-23 52 views
5

इस निम्नलिखित समारोह में, मार डाला जाता है कि जब भी मैंटाइमर, कैसे क्या timer1_tick

timer1.Enabled = true 

private void timer1_Tick(object sender, EventArgs e) 
{ 
//code here 
} 

कर मैं कैसे नियंत्रित कर सकते हैं क्या (object sender, EventArgs e) लिए भेज हो जाता है करने के लिए भेजा जा रहा है को नियंत्रित करने के?

मैं इसके मापदंडों

+0

"वैश्विक" वर्ग के सदस्य शायद सबसे अच्छा तरीका है, अपने एफ को समझाएं यहां आंतरिक लक्ष्य और शायद आपको जो चाहिए उसे बेहतर तरीके मिलेगा। –

+0

मैं गिरने वाले आइकन की एनीमेशन चलाने के लिए चाहता था, इसलिए मैं टाइमर 1_टिक पैरामीटर का उपयोग करना चाहता था जिसे मैंने स्वीकार किया था, मैं नहीं कर सकता। लेकिन मेरे पास एक और सवाल है, जब मैं टाइमर 1 करता हूं। सक्षम = सच, यह तुरंत शुरू नहीं होता है और अन्य कोड निष्पादित हो जाता है और केवल अंत में टाइमर 1_टिक के अंदर कोड निष्पादित हो जाता है? –

+0

@Alon जब टिप्पणी पोस्ट करते समय '@' जैसा कि मैंने अभी सूचित किया है अन्यथा अधिकांश लोग आपकी टिप्पणी नहीं देखेंगे। आपके प्रश्न के लिए: टाइमर अलग थ्रेड (असीमित रूप से) में काम करता है ताकि टाइमर शुरू करने से पैरेंट थ्रेड के निष्पादन को रोका न जाए। इसे तुरंत निष्पादित करने के लिए आप इसे सीधे कॉल कर सकते हैं: 'टाइमर 1_Tick (टाइमर 1, EventArgs.Empty);' –

उत्तर

6

विधि हस्ताक्षर तय हो गई है का उपयोग करना चाहते है, तो आप इसे करने के लिए अतिरिक्त पैरामीटर पारित नहीं कर सकते हैं। हालांकि, this संदर्भ ईवेंट हैंडलर के भीतर मान्य है, इसलिए आप कक्षा के इंस्टेंस सदस्यों तक पहुंच सकते हैं (class के अंदर घोषित चर) लेकिन किसी भी विधि के बाहर)।

+0

क्या मैं उस ऑब्जेक्ट पर ऑब्जेक्ट नहीं डाल सकता जिसे मैं चाहता हूं? या CellEventArgs के लिए EventArgs कास्ट? –

+1

@Alon: आप इसे सेलइवेंट आर्ट्स में नहीं डाल सकते क्योंकि यह टाइमर नियंत्रण से आया था, कुछ प्रकार के डेटाग्रिड नियंत्रण नहीं। – Sean

+0

धन्यवाद, अब मेरे लिए यह बहुत स्पष्ट है –

0

आप timer1_tick विधि में टाइमर की संपत्ति का उपयोग करना चाहते हैं, तुम कर सकते हो के माध्यम से

this.timer1 ex: this.timer1.Enabled =false; 

या

Timer timer = (Timer) sender; 
timer.Enabled = false; 
+0

मैं टाइमर_टिक फ़ंक्शन में पैरामीटर को स्वीकार करना चाहता था। मुझे लगता है कि आप अपने उत्तर के लिए –

0

हो सकता है कि आप टाइमर वर्ग से एक विरासत कर सकता है, और वहाँ, कच्चा टिक इवेंट (टाइमर से) को टिक टिकर ईवेंट में या ऐसा कुछ ऐसा करें जो पैरा को संशोधित करता है और EventArgs में डालता है (यह करने के लिए सही जगह है, प्रेषक में नहीं) अन्य पैरामीटर जो आप चाहते हैं। इसके अलावा आप अधिक या कम पैरामीटर के साथ एक विधि बना सकते हैं, यह आपके ऊपर है।

उम्मीद है कि इससे मदद मिलती है।

3

1) आप userState

void timer1_Tick(object sender, EventArgs e) 
{ 
    Timer timer = (Timer)sender; 
    MyState state = timer.Tag as MyState; 
    int x = state.Value; 
} 

2) आप टाइमर के सूत्र में इसे पढ़ने के लिए संदर्भ प्रकार के क्षेत्र का उपयोग कर सकते

void timer1_Tick(object sender, EventArgs e) 
{ 
    int x = _myState.Value; 
} 

3) आप उपयोग कर सकते हैं के रूप में अपने टाइमर के टैग संपत्ति का उपयोग कर सकते सिस्टम। थ्रेडिंग। टाइमर इवेंट हैंडलर को 0 पास करने के लिए टिमर

Timer timer = new Timer(Callback, state, 0, 1000); 
+0

thx नहीं कर सकते हैं, लेकिन मैंने यह स्वीकार किया है कि आप यह नहीं जान सकते कि वास्तव में उस फ़ंक्शन को शून्य टाइमर 1_Tick (ऑब्जेक्ट प्रेषक, EventArgs ई) कहलाता है, इसलिए मैं इनपुट पैरामीटर (ऑब्जेक्ट प्रेषक, EventArgs e) का उपयोग नहीं कर सकता)। मैं EventArgs को CellEventArgs पर डालना चाहता था और उस सेल विवरण को प्राप्त करना चाहता था जिसे टाइमर कहा जाता था –