অন্যান্য উত্তরগুলির কিছু ভালভাবে পরিচালনা করে না এমন কেসগুলিতে সম্বোধন করা:
- প্রতিক্রিয়াশীল : কীপ্রেস হ্যান্ডলিং কোডের সরাসরি সম্পাদন; ভোটদান বা ব্লক বিলম্বের অস্পষ্টতা এড়ানো
- বিকল্পতা : গ্লোবাল কিপ্রেসটি অপ্ট-ইন ; অন্যথায় অ্যাপটি স্বাভাবিকভাবে প্রস্থান করা উচিত
- উদ্বেগ পৃথককরণ: কম আক্রমণাত্মক শ্রবণ কোড; সাধারণ কনসোল অ্যাপ কোডটি স্বাধীনভাবে পরিচালনা করে।
এই পৃষ্ঠার অনেকগুলি সমাধানে পোলিং Console.KeyAvailableবা ব্লক করা জড়িত Console.ReadKey। যদিও এটি সত্য যে। নেট Consoleএখানে খুব বেশি সহযোগিতা করে না, আপনি শোনার Task.Runআরও আধুনিক Asyncপদ্ধতির দিকে যেতে ব্যবহার করতে পারেন ।
সচেতন হওয়ার মূল বিষয়টি হ'ল, ডিফল্টরূপে, আপনার কনসোল থ্রেডটি Asyncঅপারেশনের জন্য সেট আপ করা হয়নি - এর অর্থ, আপনি যখন mainসম্পূর্ণরূপে অপেক্ষা Asyncকরার পরিবর্তে আপনার ফাংশনের নীচে থেকে পড়ে যান, তখন আপনার অ্যাপডোম্যান এবং প্রক্রিয়াটি শেষ হয়ে যাবে । এটিকে সম্বোধনের সঠিক উপায় হ'লAsync আপনার একক থ্রেডেড কনসোল প্রোগ্রামে সম্পূর্ণ সমর্থন প্রতিষ্ঠার জন্য স্টিফেন ক্লিয়ারির অ্যাসিঙ্ক কনটেক্সট ব্যবহার করা use তবে সহজ ক্ষেত্রে যেমন কিপ্রেসের জন্য অপেক্ষা করার মতো, একটি পূর্ণ ট্রাম্পলিন ইনস্টল করা ওভারকিল হতে পারে।
নীচের উদাহরণটি কোনও ধরণের পুনরাবৃত্ত ব্যাচ ফাইলে ব্যবহৃত কনসোল প্রোগ্রামের জন্য। এই ক্ষেত্রে, যখন প্রোগ্রামটি এর কাজটি সম্পন্ন করা হয়, সাধারণত এটি কোনও কিপ্রেসের প্রয়োজন ছাড়াই প্রস্থান করা উচিত এবং তারপরে আমরা অ্যাপটিকে প্রস্থান করতে বাধা দেওয়ার জন্য একটি alচ্ছিক কী চাপতে পারি । আমরা চক্রটি জিনিসগুলি পরীক্ষা করতে, সম্ভবত পুনরায় শুরু করতে, বা বিরতিটি একটি পরিচিত 'কন্ট্রোল পয়েন্ট' হিসাবে ব্যবহার করতে পারি যেখানে ব্যাচের ফাইলটি পরিষ্কারভাবে বিচ্ছিন্ন করতে পারে।
static void Main(String[] args)
{
Console.WriteLine("Press any key to prevent exit...");
var tHold = Task.Run(() => Console.ReadKey(true));
// ... do your console app activity ...
if (tHold.IsCompleted)
{
#if false // For the 'hold' state, you can simply halt forever...
Console.WriteLine("Holding.");
Thread.Sleep(Timeout.Infinite);
#else // ...or allow continuing to exit
while (Console.KeyAvailable)
Console.ReadKey(true); // flush/consume any extras
Console.WriteLine("Holding. Press 'Esc' to exit.");
while (Console.ReadKey(true).Key != ConsoleKey.Escape)
;
#endif
}
}