मैं 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()
संस्करण और इनलाइन टिप्पणी जोड़ सकते हैं कि कंसोल ऐप वास्तव में संभवत: (नॉन-एस्किंक ) या (एसिंक्स ) का उपयोग करना चाहता हैSleep
Main
Delay
Main
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)
बिना इंट कास्ट किए बिना सीधे उपयोग कर सकते हैं ।