विंडोज फॉर्म टाइमर अंततः आपके कंप्यूटर के मानक सिस्टम घड़ी रिज़ॉल्यूशन के लिए संकल्प में सीमित है। यह कंप्यूटर से कंप्यूटर में भिन्न होता है, लेकिन आमतौर पर 1 एमएस और 20 एमएस के बीच होता है।
WinForms में, जब भी आप कोड में टाइमर अंतराल का अनुरोध करते हैं, तो विंडोज केवल गारंटी देगा कि आपके टाइमर को कहा जाएगा और और निर्दिष्ट मिलीसेकंड की संख्या। यह गारंटी नहीं देता है कि आपके टाइमर को आपके द्वारा निर्दिष्ट मिलीसेकंड पर कॉल किया जाएगा।
ऐसा इसलिए है क्योंकि विंडोज एक समय-साझा करने वाला ओएस है, वास्तविक समय नहीं। अन्य प्रक्रियाओं और धागे को समवर्ती रूप से चलाने के लिए निर्धारित किया जाएगा और इसलिए आपके थ्रेड को प्रोसेसर के उपयोग के लिए नियमित रूप से प्रतीक्षा करने के लिए मजबूर किया जाएगा। इसलिए आपको WinForms टाइमर कोड नहीं लिखना चाहिए जो सटीक अंतराल या मिलीसेकंड में देरी पर निर्भर करता है।
आपकी स्थिति में, अंतराल को 1 एमएस तक सेट करना वाकई विंडोज़ को इस टाइमर को जितनी बार हो सके ट्रिगर करने के लिए कह रहा है। जैसा कि आपने देखा है यह निश्चित रूप से 1 एमएस (60 एफपीएस = लगभग 17 एमएस) से काफी कम है।
यदि आपको अधिक सटीक और उच्च रिज़ॉल्यूशन टाइमर की आवश्यकता है, तो यदि आपका हार्डवेयर इसका समर्थन करता है, तो Windows API उच्च रिज़ॉल्यूशन/प्रदर्शन टाइमर प्रदान करता है, How to use the high resolution timer देखें। इसका एक दोष यह है कि उच्च प्रदर्शन का समर्थन करने के लिए आपके एप्लिकेशन CPU उपयोग में वृद्धि होगी।
कुल मिलाकर मुझे लगता है कि आप हार्डवेयर/सिस्टम स्वतंत्र गेम लूप को लागू करने से बेहतर हैं। इस तरह आपके दृश्य की अनुमानित एनीमेशन वास्तविक फ्रेम दर प्राप्त किए बिना निरंतर दिखाई देता है।अधिक जानकारी के लिए these articles एक अच्छी पृष्ठभूमि दें।
अच्छा! 'एप्लिकेशन.इडल' का उपयोग करना 1 एमएस टाइमर से बहुत अधिक सुरुचिपूर्ण लगता है। मुझे कल भी 'स्टॉपवॉच' को आजमाने की ज़रूरत होगी। धन्यवाद! ** संपादित करें: ** असल में, मैंने झूठ बोला। जब आप विंडो का आकार बदल रहे हैं या स्थानांतरित कर रहे हैं, तो ऐसा लगता है कि यह निष्क्रिय हो रहा है, और इस प्रकार रीड्रॉइंग बंद हो जाता है। यह मूल रूप से ड्राइंग की प्राथमिकता को कम करता है। हो सकता है कि मैं न्यूनतम रेड्रा दर लागू करने के लिए टाइमर के साथ रहूंगा ... कोई कारण नहीं कि मैं दोनों विधियों को भी जोड़ नहीं सकता। – mpen
इसके अलावा, स्टॉपवॉच केवल समय के लिए अच्छा है, कॉलबैक घटनाओं के लिए नहीं। – mpen
निष्क्रिय होने पर भी आप अपना टाइमर शुरू करने का प्रयास कर सकते हैं, फिर निष्क्रिय घटना को आग लगने पर फिर से इसे रोकें/जांचें। आप इस तरह से काफी करीब हो सकते हैं। – Nanook