थ्रेड का उपयोग करते हुए c#में एक लूप में हर बार दूसरी प्रतीक्षा कर रहा है




system (2)

मैं स्क्रीन पर "पी" को हर सेकंड प्रिंट करने की कोशिश कर रहा हूं।

जब मैं इसे चलाता हूं:

while (true)
    Thread.Sleep(1000); 
    Console.WriteLine("p");

यह बिल्कुल नहीं छपा। लेकिन जब मैं इसे चलाता हूं:

while (true)
    Console.WriteLine("p");
    Thread.Sleep(1000); 

इसकी छपाई का इंतजार किए बिना। क्या कोई मुझे यह समझा सकता है और एक सुझाव दे सकता है?


यह ब्रेसिज़ के बिना काम क्यों नहीं किया?

C # पायथन नहीं है। पायथन में, प्रोग्राम संरचना रिक्त स्थान द्वारा इंगित की जाती है। सी # में व्हाट्सएप को पूरी तरह से नजरअंदाज किया जाता है और कार्यक्रम की संरचना भाषा के व्याकरण द्वारा निर्धारित की जाती है।

C # फॉर्म का एक ब्लॉक { any number of statements } का एक स्टेटमेंट है।

का व्याकरण है

while( an expression that can be evaluated to bool ) 
    a single statement

लेकिन चूंकि { ... } एक एकल स्टेटमेंट है , यदि आप अपने while के बॉडी में कई स्टेटमेंट चाहते हैं, या if , या foreach चाहते हैं, तो आप एक ब्लॉक का उपयोग करते हैं।

संयोग से, आपको थ्रेड स्लीप का उपयोग नहीं करना चाहिए । इसका उपयोग केवल परीक्षण कोड में किया जाना चाहिए। धागे महंगे कार्यक्रम संसाधन हैं; उन्हें सोने के लिए भुगतान न करें! यदि आप देरी का परिचय देना चाहते हैं, तो दो काम करने हैं। एक इवेंट-संचालित प्रोग्राम में, एक टाइमर शुरू करें और फिर जब यह बंद हो जाए तो टाइमर इवेंट को संभाल लें। या, अपने कार्यक्रम को अतुल्यकालिक Task.Delay और Task.Delay इंतजार करें। सो जाना एक बुरा अभ्यास है और इंगित करता है कि आपके प्रोग्राम डिज़ाइन में कुछ दोष है।

अब, आप कह सकते हैं, हे, यह एक सांत्वना कार्यक्रम है और मैं वास्तव में अपने उपयोगकर्ता अनुभव में देरी का परिचय देना चाहता हूं, और मेरे पास पृष्ठभूमि में कोई भी घटना प्रसंस्करण नहीं है, और इसी तरह, इसलिए नींद नहीं आती है? और मैं उस तर्क को समझ सकता हूं; यह सुविधाजनक है। हालाँकि, (1) अब अच्छी आदतें प्राप्त करें, जबकि आप अभी भी शुरुआत कर रहे हैं और आपको बाद में उन्हें नहीं तोड़ना होगा, और (2) प्रोग्राम्स का विकास होगा। कुछ बिंदु पर आप एक प्रोग्राम लिखना चाहते हैं जो इंटरएक्टिव रहता है और उपयोगकर्ता कीपर्स, या नेटवर्क ट्रैफ़िक या ऐसी किसी अन्य चीज़ पर प्रतिक्रिया देता है, जबकि UI रुका हुआ है; यदि आपके धागे सो रहे हैं, तो वे उन घटनाओं पर प्रतिक्रिया नहीं दे रहे हैं।


आप पूरे कोड को लूप नहीं कर रहे हैं

यह :

while (true)
    Thread.Sleep(1000); 
    Console.WriteLine("p");

इस प्रकार है:

while (true)
{
    Thread.Sleep(1000); 
}
Console.WriteLine("p");

आपको स्पष्ट रूप से अपने ब्रेसिज़ को उन सभी लाइनों के चारों ओर सेट करने की आवश्यकता है जिन्हें आप चाहते हैं कि लूप प्रदर्शन करें अन्यथा यह केवल अगले निर्देश पर लूप है।

कुछ इस तरह से आप देख रहे हैं:

while (true)
{
    Thread.Sleep(1000); 
    Console.WriteLine("p");
}




system