मैं C # में एक कार्यक्रम में देरी कैसे जोड़ सकता हूं?
मैं C # में एक कार्यक्रम में देरी कैसे जोड़ सकता हूं?
जवाबों:
आप Thread.Sleep()फ़ंक्शन का उपयोग कर सकते हैं , जैसे
int milliseconds = 2000;
Thread.Sleep(milliseconds);
यह पूरी तरह से 2 सेकंड के लिए वर्तमान थ्रेड के निष्पादन को रोकता है।
संभवतः इसके लिए सबसे उपयुक्त परिदृश्य यह है Thread.Sleepकि जब आप किसी अन्य थ्रेड में संचालन में देरी करना चाहते हैं, तो मुख्य से अलग:
MAIN THREAD --------------------------------------------------------->
(UI, CONSOLE ETC.) | |
| |
OTHER THREAD ----- ADD A DELAY (Thread.Sleep) ------>
अन्य परिदृश्यों के लिए (जैसे कुछ समय के बाद संचालन शुरू करना आदि) कोडी के उत्तर की जांच करें ।
await Task.Delay(milliseconds)। इसने मेरे लिए काम किया :)
2–3 सेकंड के अंतराल के साथ एक टाइमर का उपयोग करें।
आपके पास चुनने के लिए आपके पास किस प्रकार का आवेदन है, इसके आधार पर चुनने के लिए तीन अलग-अलग विकल्प हैं:
Thread.Sleepयदि आपके एप्लिकेशन को एक ही समय में उस थ्रेड पर किसी भी इनपुट को संसाधित करने की आवश्यकता नहीं है (WinForms, WPF), जैसा Sleepकि पूरी तरह से थ्रेड को लॉक करेगा और इसे अन्य संदेशों को संसाधित करने से रोकेगा। एक एकल-थ्रेडेड एप्लिकेशन (जैसा कि अधिकांश हैं) को मानते हुए, आपका पूरा एप्लिकेशन प्रतिक्रिया करना बंद कर देगा, बजाय एक ऑपरेशन में देरी करने के जितना संभव हो सकेगा। ध्यान दें कि प्योर कंसोल एप्लिकेशन में स्लीप का उपयोग करना ठीक हो सकता है क्योंकि अलग-अलग थ्रेड (या Task.Delayबेहतर विकल्प) को संभालने के लिए कोई "इवेंट" नहीं हैं ।
टाइमर के अलावा और Sleepआप उपयोग कर सकते हैं Task.Delayजो कि अतुल्यकालिक संस्करण है Sleepप्रसंस्करण प्रक्रियाओं से धागा ब्लॉक नहीं करता है (यदि ठीक से उपयोग किया जाता है - इसे अनंत नींद में बदल न दें .Wait())।
public async void ClickHandler(...)
{
// whatever you need to do before delay goes here
await Task.Delay(2000);
// whatever you need to do after delay.
}
यदि आप C # 7.1 ( MSDN ब्लॉग पर Async मुख्य ) का उपयोग करते हैं तो उसी await Task.Delay(2000)का उपयोग Mainकंसोल एप्लिकेशन की एक विधि में किया जा सकता है ।
नोट: समय के साथ Sleepसंभावित रूप से कई ऑपरेशन शुरू करने से आने वाली दौड़ की स्थितियों से बचने में लाभ के साथ ऑपरेशन में देरी हुई है / Delay। दुर्भाग्य से फ्रीज़िंग यूआई-आधारित एप्लिकेशन स्वीकार्य नहीं है, इसलिए आपको यह सोचने की ज़रूरत है कि यदि आप कई देरी शुरू करते हैं तो क्या होगा (यानी अगर यह एक बटन क्लिक से चालू हो जाता है) - इस तरह के बटन को अक्षम करने, या टाइमर / कार्य को रद्द करने या सुनिश्चित करने में देरी होने पर विचार करें। ऑपरेशन कई बार सुरक्षित रूप से किया जा सकता है।
Thread.Sleepचेतावनी उतनी महत्वपूर्ण नहीं हो सकती है।
await Task.Delay()संस्करण और इनलाइन टिप्पणी जोड़ सकते हैं कि कंसोल ऐप वास्तव में संभवत: (नॉन-एस्किंक ) या (एसिंक्स ) का उपयोग करना चाहता हैSleepMainDelayMain
2.3 सेकंड के लिए आपको करना चाहिए:
System.Threading.Thread.Sleep(2300);
System.Threading.Thread.Sleep(
(int)System.TimeSpan.FromSeconds(3).TotalMilliseconds);
या usingबयानों के साथ :
Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);
मैं इसे 1000 * numSeconds(या बस 3000) पसंद करता हूं क्योंकि यह अधिक स्पष्ट करता है कि किसी ऐसे व्यक्ति के लिए क्या हो रहा है जो Thread.Sleepपहले इस्तेमाल नहीं किया है । यह आपके इरादे को बेहतर बनाता है।
Thread.Sleep(TimeSpan)बिना इंट कास्ट किए बिना सीधे उपयोग कर सकते हैं ।