2012-07-02 16 views
47

मैं प्रोग्राम को उस क्षण से दोहराना चाहता हूं जब तक कि यह प्रोग्राम कुछ ही सेकंड बंद न हो जाए। सी # में ऐसा करने का सबसे अच्छा तरीका क्या होगा?प्रत्येक कुछ सेकंड में एक फ़ंक्शन दोहराएं

उत्तर

69

टाइमर का उपयोग करें। विभिन्न बुनियादी उद्देश्यों के लिए उपयुक्त 3 मूल प्रकार हैं।

केवल एक Windows प्रपत्र अनुप्रयोग में प्रयोग करें। इस टाइमर को संदेश लूप के हिस्से के रूप में संसाधित किया जाता है, इसलिए टाइमर को उच्च लोड के तहत जमे हुए किया जा सकता है।

जब आप समक्रमिकता की जरूरत है, यह एक का उपयोग करें। इसका मतलब है कि टिक इवेंट थ्रेड पर चलाया जाएगा जिसने टाइमर शुरू किया है, जिससे आप बिना किसी परेशानी के जीयूआई ऑपरेशन कर सकते हैं।

यह सबसे उच्चस्तरीय टाइमर, जो आग एक पृष्ठभूमि धागे पर टिक्स है। यह आपको जीयूआई या मुख्य धागे को ठंडा किए बिना पृष्ठभूमि में संचालन करने देता है।

ज्यादातर मामलों के लिए, मैं System.Timers.Timer की अनुशंसा करता हूं।

+4

बस एक जोड़ा - वास्तव में इस से अधिक वास्तव में है - उदाहरण के लिए, 'डिस्पैचर टिमर' (डब्ल्यूपीएफ/सिल्वरलाइट), साथ ही उपकरण जैसे अन्य टाइमर भी हैं। –

+4

यह भी ध्यान दें कि System.Timers.Timer की विलम्बित घटना यूआई थ्रेड पर आग लगती है यदि आप सिंक्रनाइज़िंग ऑब्जेक्ट सेट करते हैं अन्यथा यह थ्रेडपूल थ्रेड पर आग लगती है। –

+0

ध्यान देने योग्य बात यह है कि यदि आप विश्वसनीयता चाहते हैं तो इनमें से कोई भी काम 100% समय पर नहीं, विशेष रूप से भारी भार के तहत सिस्टम पर। –

11

timer का उपयोग करें। ध्यान रखें कि .NET कई अलग-अलग टाइमर के साथ आता है। This article मतभेदों को शामिल करता है।

+0

MSDN पत्रिका लिंक मर चुका है। –

+0

धन्यवाद। लिंक अपडेट किया गया। –

36

इस System.Timers.Timer के लिए सबसे अच्छा काम करता

// Create a timer 
myTimer = new System.Timers.Timer(); 
// Tell the timer what to do when it elapses 
myTimer.Elapsed += new ElapsedEventHandler(myEvent); 
// Set it to go off every five seconds 
myTimer.Interval = 5000; 
// And start it   
myTimer.Enabled = true; 

// Implement a call with the right signature for events going off 
private void myEvent(object source, ElapsedEventArgs e) { } 

जानकारी के लिए Timer Class (.NET 4.6 and 4.5) देखें

+3

एक त्वरित प्रतिलिपि और पेस्ट कंसोल की तलाश करने वाले खोजकर्ताओं के लाभ के लिए, मैंने @IvoTops उदाहरण का उपयोग किया और यहां एक नमूना बनाया -> https://gist.github.com/HockeyJustin/1161699bd26adb5c054d। – HockeyJ

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