2013-12-17 1 views
5

मैंने एक साधारण कंसोल एप्लिकेशन बनाया है, और मुझे उपयोगकर्ता के लिए एक कुंजीचर इनपुट करने के लिए एक विशिष्ट समय देना होगा।कंसोल रीडकी टाइमआउट

क्या मुझे इसका उपयोग करना चाहिए?

System.Threading.Thread.Sleep(1000); 

जो लोग समझ में नहीं आया, तो मैं इस कार्यक्रम की जरूरत है Console.ReadKey().KeyChar;x के बाद सेकंड छोड़।

क्या यह संभव है?

+4

उपयोग एक टाइमर। नींद आपके गुई को फ्रीज कर देगी। –

+0

यह उत्तर आपको चाहिए जो हो सकता है। । । http://stackoverflow.com/a/57655/18797 –

+0

@OndrejJanacek कंसोल जीयूआई क्या है? – Tony

उत्तर

0

समस्या: यदि आप Thread.Sleep() का उपयोग 1 सेकंड के लिए प्रतीक्षा करते हैं तो यह समय के लिए मुख्य थ्रेड लटकता है।

समाधान: आप System.Timers.Timer का उपयोग समय की प्रतीक्षा के लिए कर सकते हैं।

इस प्रयास करें:

System.Timers.Timer timer1 = new System.Timers.Timer(); 
    timer1.Interval=1000;//one second 
    timer1.Elapsed += new System.Timers.ElapsedEventHandler(timer1_Tick); 
    timer1.Start(); 
    char ch; 
    private void timer1_Tick(object sender, System.Timers.ElapsedEventArgs e) 
    { 
     ch=Console.ReadKey().KeyChar; 
     //stop the timer whenever needed 
     //timer1.Stop(); 
    } 
+0

यह आपके ओपी की आवश्यकता नहीं है, आपके समाधान में आप 'Console.ReadKey()' को समय-समय पर कॉल करते हैं, लेकिन ओपी चाहते हैं ** ** ** कंसोल छोड़ें। ReadKey()। KeyChar; x सेकंड_ – Grundy

+0

@ ग्रुंडी के बाद: यह सटीक समाधान नहीं है, क्योंकि ओपी ने अभी पूछा था, 'क्या मुझे इसका उपयोग करना चाहिए? थ्रेड। सो जाओ() 'यह आईएमओ के सवाल का जवाब देता है। अगर उसने अपना कोड दिखाया है तो मैं सटीक समाधान प्रदान करता। –

+0

ओपी ने कंक्रीट समस्या के लिए इसका उपयोग करने के बारे में पूछा, लेकिन आपके जवाब में – Grundy

9

मैं इस तरह यह करना होगा:

DateTime beginWait = DateTime.Now; 
while (!Console.KeyAvailable && DateTime.Now.Subtract(beginWait).TotalSeconds < 5) 
    Thread.Sleep(250); 

if (!Console.KeyAvailable) 
    Console.WriteLine("You didn't press anything!"); 
else 
    Console.WriteLine("You pressed: {0}", Console.ReadKey().KeyChar); 
+1

कहा गया है कि @ ओन्ड्रेज जेनेसेक 'थ्रेड स्लीप (250);' गुई – Grundy

+0

फ्रीज करेगा यह मेरे लिए अच्छा काम करता है! – Tony

+1

हां, क्योंकि 250 एमएस 1 सेकंड से कम है, लेकिन गुई सभी एक ही फ्रीज – Grundy

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