2009-06-18 16 views
28

मान लीजिए कि हम System.Windows.Forms.Timer का उपयोग कर रहे हैं .NET अनुप्रयोग में, क्या उपयोग करने के बीच कोई सार्थक अंतर है सक्षम संपत्ति का उपयोग कर बनाम टाइमर पर स्टार्ट() और स्टॉप() विधियां?System.Windows.Forms.Timer.Start()/Stop() बनाम सक्षम = सत्य/झूठा

उदाहरण के लिए, अगर हम एक टाइमर रोक जब तक हम कुछ प्रसंस्करण करना चाहते हैं, हम कर सकता है:

myTimer.Stop(); 
// Do something interesting here. 
myTimer.Start(); 

या, हम कर सकता है:

myTimer.Enabled = false; 
// Do something interesting here. 
myTimer.Enabled = true; 

यदि कोई महत्वपूर्ण अंतर, समुदाय में आम सहमति है कि किस विकल्प को चुनना है?

उत्तर

30

रूप BFree और James दोनों ने कहा, वहाँ की कार्यक्षमता के संबंध में Start\Stop बनाम Enabled में कोई अंतर नहीं है। हालांकि, जिस पर निर्णय का उपयोग संदर्भ और अपने कोडिंग शैली दिशानिर्देशों पर आधारित होना चाहिए। यह इस बात पर निर्भर करता है कि आप अपने कोड के पाठक को जो लिखा है उसे समझने के लिए चाहते हैं।

उदाहरण के लिए, यदि आप चाहते हैं कि आप ऑपरेशन शुरू करने और उस ऑपरेशन को रोकने के रूप में क्या कर रहे हैं, तो आप शायद Start/Stop का उपयोग करना चाहते हैं। हालांकि, अगर आप इंप्रेशन देना चाहते हैं कि आप किसी सुविधा की पहुंच या कार्यक्षमता को सक्षम कर रहे हैं तो Enabled और true/false का उपयोग करना अधिक प्राकृतिक फिट है।

मुझे नहीं लगता कि सिर्फ एक या दूसरे का उपयोग करने पर आम सहमति की आवश्यकता है, आपको वास्तव में अपने कोड और उसके रखरखाव की ज़रूरतों के आधार पर निर्णय लेना होगा।

+1

ठीक तो मूल रूप से जब Timer.Enabled का प्रारंभिक मूल्य "गलत" है, और रन टाइम में , मैंने स्टार्ट(), टाइमर कहा। सक्षम मान अब "सच" होगा? क्षमा करें मुझे इसके बजाय एक साधारण कोड लिखना चाहिए। –

+0

यह सही है। –

6

नहीं वे एक दूसरे के बराबर हैं।

Timer.Enabled और Timer.Start/Timer.Stop

देखें आम सहमति के बारे में अपने प्रश्न को जोड़ने के लिए, मैं पठनीयता के लिए प्रारंभ करें/रोकें तरीकों और उसके भी बेहतर मुझे लगता है उपयोग करने के लिए अपने शायद बेहतर अभ्यास कहेंगे।

जेम्स।

15

माइक्रोसॉफ्ट के प्रलेखन से:

प्रारंभ विधि कॉलिंग ही सच करने के लिए सक्षम सेटिंग के रूप में है। इसी तरह, स्टॉप विधि को कॉल करना सेटिंग के समान है जो गलत पर सक्षम है।

http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.enabled.aspx

तो, मुझे लगता है कि वहाँ कोई अंतर नहीं है ...

5

व्यक्तिगत रूप से, मैं गुण स्थापित एक मूल्य बदल रहा है के अलावा अन्य बहुत ज्यादा परिणाम के लिए पसंद नहीं है, तो मैं मेरे लिए के रूप में यह स्पष्ट (ईआर) है Start()/Stop() से चिपक जाते हैं कि आप एक विधि लागू कर रहे हैं जब, आप कुछ होने के लिए पूछ रहे हैं।

कहा कि, मुझे लगता है नहीं है वहाँ क्या Enabled = true की स्थापना करने के लिए :)

+0

मुझे इसके बारे में निश्चित नहीं है ... जब तक मैं प्रलेखन नहीं पढ़ता, मेरा मानसिक मॉडल यह था कि स्टार्ट()/स्टॉप() ने टाइमर को गिनती शुरू या बंद कर दिया, जबकि सक्षम सेटिंग को नियंत्रित किया जाएगा कि घटनाओं को निकाल दिया गया है या नहीं टाइमर समाप्त हो गया (यह उन मामलों में उपयोगी होगा जहां आपको अस्थायी रूप से घटनाओं को रोकने की आवश्यकता हो सकती है, लेकिन यदि आप उन्हें बाद में पुनः सक्षम करते हैं तो उनके लिए एक ही शेड्यूल रखें)। – Jules

+0

@ जुल्स जो समझ में आता है, लेकिन गलत है :) यदि आप 'सक्षम = सत्य' सेट करते हैं तो अगली घटना 'अंतराल' के बाद आग लग जाएगी, जब भी आप उन्हें अक्षम नहीं करते हैं तो अगली बार निकाल दिया जाएगा। –

+0

हां; मेरा मुद्दा यह है कि यह एक व्यावहारिक व्याख्या है, इसलिए आपको वास्तव में सत्य का सुझाव देने के बजाय सक्षम संपत्ति का उपयोग न करके अस्पष्टता से बचना चाहिए। :) – Jules

1

मैं timer.Stop() और timer.Start() का उपयोग नहीं करते हैं, क्योंकि वे timer.Enabled के बाद के चरणों रहे हैं जा रहा है के बारे में अस्पष्टता की एक पूरी बहुत कुछ है। यदि आप एप्लिकेशन की शुरुआत (लोडिंग पर) पर टाइमर को झूठा सेट करना चाहते हैं, तो आपको timer.Enabled = false, timer.Stop() का उपयोग नहीं करना चाहिए। यही कारण है कि मैं timer.Enabled = false/true का उपयोग करता हूं।

2

यह जांचने के लिए एक सरल कोड है कि कैसे Enabled, Start(), Stop() एक दूसरे के साथ काम करते हैं।

, एक परीक्षण विंडोज प्रपत्र ऐप्स बनाएं दो सरल बटन जोड़ने और Form1() निर्माता के अंदर इस कोड पेस्ट करें:

int c = 0; 
Timer tmr1 = new Timer() 
{ 
    Interval = 100, 
    Enabled= false 
}; 
tmr1.Tick += delegate 
{ 
    c++; 
}; 

// used to continously monitor the values of "c" and tmr1.Enabled 
Timer tmr2 = new Timer() 
{ 
    Interval = 100, 
    Enabled = true 
}; 
tmr2.Tick += delegate 
{ 
    this.Text = string.Format("c={0}, tmr1.Enabled={1}", c, tmr1.Enabled.ToString()); 
}; 

button1.Click += delegate 
{ 
    tmr1.Start(); 
}; 
button2.Click += delegate 
{ 
    tmr1.Stop(); 
}; 
संबंधित मुद्दे