क्या एक अंतर है between System.Windows.Forms.Timer()और System.Windows.Threading.DispatcherTimer()? किन मामलों में, हमें उनका उपयोग करना चाहिए? कोई सर्वोत्तम प्रथा?
क्या एक अंतर है between System.Windows.Forms.Timer()और System.Windows.Threading.DispatcherTimer()? किन मामलों में, हमें उनका उपयोग करना चाहिए? कोई सर्वोत्तम प्रथा?
जवाबों:
Windows.Forms.Timerटाइमर घटनाओं को संसाधित करने के लिए विंडोज़ रूपों संदेश लूप का उपयोग करता है। इसका उपयोग Windows Forms अनुप्रयोगों में उपयोग किए जा रहे समय घटनाओं को लिखते समय किया जाना चाहिए, और आप चाहते हैं कि टाइमर मुख्य UI थ्रेड पर आग लगा दे।
DispatcherTimerWPF समय तंत्र है। इसका उपयोग तब किया जाना चाहिए जब आप एक समान तरीके से समय को संभालना चाहते हैं (हालांकि यह एक थ्रेड तक सीमित नहीं है - प्रत्येक थ्रेड का अपना डिस्पैचर है) और आप WPF का उपयोग कर रहे हैं। यह डिस्पैचर के रूप में उसी थ्रेड पर ईवेंट को फायर करता है।
सामान्य तौर पर, WPF == DispatcherTimerऔर Windows Forms == Forms.Timer।
कहा जा रहा है, वहाँ भी है System.Threading.Timer, जो एक टाइमर है classजो एक अलग धागे पर फायर करता है। यह विशुद्ध रूप से संख्यात्मक समय के लिए अच्छा है, जहां आप UI को अपडेट करने की कोशिश नहीं कर रहे हैं, आदि।
मुझे यहाँ छोटे उदाहरणों के साथ टाइमर के बारे में अच्छा लेख मिला है: http://www.progware.org/Blog/post/Timers-in-WPF.aspx
एक निष्कर्ष के रूप में:
यदि DoSomething () GUI घटकों में हेरफेर करता है, तो टाइमर के साथ आपको उपयोग करने की आवश्यकता है: this.Dispatcher.Invoke ((Action) प्रतिनिधि {// GUI संबंधित CODE HERE} चूंकि आप GUI नियंत्रणों को सीधे किसी भिन्न थ्रेड से एक्सेस नहीं कर सकते हैं। डिस्पैचर के साथ आप करते हैं। ऐसा करने की जरूरत नहीं है।
यदि DoSomething () एक समय लेने वाला कार्य करता है, तो डिस्पैचरटाइमर के मामले में GUI फ्रीज हो जाएगा। टाइमर के मामले में यह लंबे समय से एक अलग धागे में निष्पादित किया जाता है