2 या 3 सेकंड के लिए विलंब कैसे जोड़ें [बंद]


129

मैं C # में एक कार्यक्रम में देरी कैसे जोड़ सकता हूं?


2
ऐसा करने के कई तरीके हैं, लेकिन आपको देरी करने की आवश्यकता क्यों है? अगर हमें पता होता तो हम इसे करने का सबसे उपयुक्त तरीका सुझा सकते थे।
ChrisF

3
इस प्रश्न को स्पष्ट रूप से थ्रेड.लीप () की सिफारिश करने के लिए अंडर-डॉक्यूमेंट किया गया है।
हंस पैसेंट

1
स्पष्टीकरण के लिए, मैंने इस प्रश्न को बंद करने के लिए मतदान किया क्योंकि आपने किसी को भी एक अच्छा, गुणवत्ता उत्तर देने के लिए पर्याप्त विवरण नहीं दिया है। अगर आप जो करने की कोशिश कर रहे हैं, उस पर कुछ और विस्तार जोड़ दें तो मैं इसे एक वैध प्रश्न के रूप में फिर से खोलने के लिए तैयार हूं। जल्दी बंद करने की वोटिंग खराब गुणवत्ता के सवालों के "शोर" की बाढ़ को रोकने का एक तरीका है। एक बार जब आप अधिक विवरण जोड़ लेते हैं, तो मुझे एक टिप्पणी छोड़ दें और / या फिर इसे फिर से खोलने के लिए एक मॉड फ्लैग करें।
कोड़ी ग्रे

14
इस प्रश्न को बंद करने का बुरा निर्णय। यह एक सवाल है, और यह प्रकृति में सामान्य होने के लिए ठीक है। मैं इसे पूरी तरह से समझ गया।
user2430797

5
फिर भी एक और सवाल जो मैं खोज रहा था, एक ऐसे सवाल का जवाब दिया जो बिना किसी कारण के बंद हो गया था।
ग्लेन मेनार्ड

जवाबों:


176

आप Thread.Sleep()फ़ंक्शन का उपयोग कर सकते हैं , जैसे

int milliseconds = 2000;
Thread.Sleep(milliseconds);

यह पूरी तरह से 2 सेकंड के लिए वर्तमान थ्रेड के निष्पादन को रोकता है।

संभवतः इसके लिए सबसे उपयुक्त परिदृश्य यह है Thread.Sleepकि जब आप किसी अन्य थ्रेड में संचालन में देरी करना चाहते हैं, तो मुख्य से अलग:

 MAIN THREAD        --------------------------------------------------------->
 (UI, CONSOLE ETC.)      |                                      |
                         |                                      |
 OTHER THREAD            ----- ADD A DELAY (Thread.Sleep) ------>

अन्य परिदृश्यों के लिए (जैसे कुछ समय के बाद संचालन शुरू करना आदि) कोडी के उत्तर की जांच करें ।


13
Thead.Sleep कारण का उपयोग करने से बचें यह अवधि समाप्त होने तक कुछ भी करने से वर्तमान थ्रेड को पूरी तरह से ब्लॉक कर देगा।
मोहम्मद स्विलम

7
@ मोहम्मद: हाँ, बेशक यह पूरी तरह से चलने को अवरुद्ध करेगा। लेकिन कभी-कभी यह उपयोगी हो सकता है ... यह वास्तव में निर्भर करता है कि ओपी को क्या जरूरत है ...
डाइरेक्टेल

12
चूंकि मैं एक नया उत्तर पोस्ट नहीं कर सकता, इसलिए मैं टिप्पणी करना चाहता हूं - यदि आप नहीं चाहते कि यह कार्यक्रम को अवरुद्ध करे, तो आप उपयोग कर सकते हैं await Task.Delay(milliseconds)। इसने मेरे लिए काम किया :)
सयानगर्ल

मेरे मामले में मैं प्रतीक्षा का उपयोग नहीं कर सका क्योंकि मुझे प्रोग्राम के एक हिस्से से बुलाया गया था जो किसी और द्वारा लिखा गया है। यह प्रतीक्षा योग्य नहीं है लेकिन अगर मैं "हैंग" करता हूं तो मैं अपना सामान बंद करने से पहले 10 सेकंड के लिए काम कर सकता हूं। स्लीपिंग 2 सेकेंड एक आकर्षण की तरह काम करता है;) तो कुछ मामलों में यह तरीका है।
एक्ट

@MohammedElSayed: उत्तर निर्भर करता है। यह सब उपयोग के इरादे पर निर्भर करता है। मेरे मामले के लिए, मुझे डेटाबेस में सम्मिलित करते समय एक सूचकांक बाधा से बचने के लिए थ्रेड को 0.6 सेकंड के लिए ठीक से सोने की आवश्यकता है।
गन वेंडर

61

2–3 सेकंड के अंतराल के साथ एक टाइमर का उपयोग करें।

आपके पास चुनने के लिए आपके पास किस प्रकार का आवेदन है, इसके आधार पर चुनने के लिए तीन अलग-अलग विकल्प हैं:

  1. System.Timers.Timer
  2. System.Windows.Forms.Timer
  3. System.Threading.Timer

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। दुर्भाग्य से फ्रीज़िंग यूआई-आधारित एप्लिकेशन स्वीकार्य नहीं है, इसलिए आपको यह सोचने की ज़रूरत है कि यदि आप कई देरी शुरू करते हैं तो क्या होगा (यानी अगर यह एक बटन क्लिक से चालू हो जाता है) - इस तरह के बटन को अक्षम करने, या टाइमर / कार्य को रद्द करने या सुनिश्चित करने में देरी होने पर विचार करें। ऑपरेशन कई बार सुरक्षित रूप से किया जा सकता है।


5
यदि यह एक कंसोल एप्लिकेशन है, तो Thread.Sleepचेतावनी उतनी महत्वपूर्ण नहीं हो सकती है।
मर्लिन मॉर्गन-ग्राहम

1
एक 4 टाइमर है: System.Web.UI.Timer , एक ASP.NET घटक जो नियमित अंतराल पर अतुल्यकालिक या तुल्यकालिक वेब पेज पोस्टबैक करता है।
डेविड

1
शीर्ष उत्तर होना चाहिए। अगर इसमें से किसी एक का उपयोग करने के लिए एक उदाहरण था, तो इसे अधिक वोट मिलेंगे ...
मर्कुटियो

कोडी ग्रे, क्या आप await Task.Delay()संस्करण और इनलाइन टिप्पणी जोड़ सकते हैं कि कंसोल ऐप वास्तव में संभवत: (नॉन-एस्किंक ) या (एसिंक्स ) का उपयोग करना चाहता हैSleepMainDelayMain
अलेक्सई लेवेनकोव

1
@ कोडीग्रे किया।
अलेक्सी लेवेनकोव


6
System.Threading.Thread.Sleep(
    (int)System.TimeSpan.FromSeconds(3).TotalMilliseconds);

या usingबयानों के साथ :

Thread.Sleep((int)TimeSpan.FromSeconds(2).TotalMilliseconds);

मैं इसे 1000 * numSeconds(या बस 3000) पसंद करता हूं क्योंकि यह अधिक स्पष्ट करता है कि किसी ऐसे व्यक्ति के लिए क्या हो रहा है जो Thread.Sleepपहले इस्तेमाल नहीं किया है । यह आपके इरादे को बेहतर बनाता है।


2
1000 से अधिक टाइमस्पैन के लिए +1 *
लेफ्टी

.NET 4 के बाद आप Thread.Sleep(TimeSpan)बिना इंट कास्ट किए बिना सीधे उपयोग कर सकते हैं ।
Holf
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.