2008-08-01 24 views
75

मुझे पता है कि .NET में तीन टाइमर प्रकार हैं (Comparing the Timer Classes in the .NET Framework Class Library देखें)। मैंने थ्रेडेड टाइमर चुना है क्योंकि मुख्य थ्रेड व्यस्त होने पर अन्य प्रकार बहाव कर सकते हैं, और मुझे इसे विश्वसनीय होने की आवश्यकता है।कंसोल एप्लिकेशन में विश्वसनीय टाइमर

टाइमर के नियंत्रण में यह टाइमर काम करता है जिस तरह से यह एक और थ्रेड पर रखा जाता है ताकि यह व्यस्त होने पर पैरेंट थ्रेड पर पूरा होने वाले काम के साथ हमेशा टिक टिक सके।

कंसोल एप्लिकेशन में इस टाइमर के साथ समस्या यह है कि टाइमर दूसरे थ्रेड पर टिक रहा है, जबकि मुख्य धागा कुछ भी नहीं कर रहा है, इसलिए एप्लिकेशन बंद हो जाता है।

मैंने while true लूप जोड़ने की कोशिश की, लेकिन टाइमर बंद होने पर मुख्य धागा बहुत व्यस्त है।

उत्तर

48

आप मुख्य धागे को अवरुद्ध करने के लिए Console.ReadLine() जैसे कुछ का उपयोग कर सकते हैं, इसलिए अन्य पृष्ठभूमि धागे (जैसे टाइमर थ्रेड) अभी भी काम करेंगे। निष्पादन को अवरुद्ध करने के लिए आप AutoResetEvent का भी उपयोग कर सकते हैं, फिर (जब आपको आवश्यकता हो) आप मुख्य थ्रेड को रिलीज़ करने के लिए उस AutoResetEvent ऑब्जेक्ट पर सेट() विधि को कॉल कर सकते हैं। यह भी सुनिश्चित करें कि टाइमर ऑब्जेक्ट का आपका संदर्भ दायरे और कचरे से बाहर नहीं निकलता है।

15

इसकी प्रसंस्करण के अंत में मुख्य धागे को अवरुद्ध करने के लिए ManualResetEvent का उपयोग करने पर विचार करें, और टाइमर की प्रसंस्करण समाप्त हो जाने के बाद Reset() पर कॉल करें। यदि यह ऐसा कुछ है जिसे लगातार चलाने की आवश्यकता है, तो इसे कंसोल ऐप की बजाय सेवा प्रक्रिया में ले जाने पर विचार करें।

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