যদি আপনার একক থ্রেডযুক্ত অ্যাপ্লিকেশন থাকে তবে আপনি মেইন ফাংশনে একটি সাধারণ চেষ্টা / ক্যাপ ব্যবহার করতে পারেন, তবে এটি মেইন ফাংশনের বাইরে ফেলে দেওয়া হতে পারে এমন ব্যতিক্রমগুলি কভার করে না, অন্য থ্রেডগুলিতে, উদাহরণস্বরূপ (অন্য হিসাবে উল্লিখিত হিসাবে মন্তব্য)। এই কোডটি প্রদর্শন করে যে কীভাবে কোনও ব্যতিক্রম অ্যাপ্লিকেশনটিকে মীমাংসিত করার চেষ্টা করলেও অ্যাপ্লিকেশনটি বন্ধ হতে পারে (লক্ষ্য করুন আপনি কীভাবে প্রোগ্রামটি সুনির্দিষ্টভাবে প্রস্থান করেন যদি আপনি চাপটি চাপান এবং যদি ব্যতিক্রম হওয়ার আগে অ্যাপ্লিকেশনটিকে দক্ষতার সাথে প্রস্থান করতে দেয় তবে আপনি যদি এটি চালাতে দেন তবে , এটি বেশ দুর্ভাগ্যজনকভাবে শেষ করে):
static bool exiting = false;
static void Main(string[] args)
{
try
{
System.Threading.Thread demo = new System.Threading.Thread(DemoThread);
demo.Start();
Console.ReadLine();
exiting = true;
}
catch (Exception ex)
{
Console.WriteLine("Caught an exception");
}
}
static void DemoThread()
{
for(int i = 5; i >= 0; i--)
{
Console.Write("24/{0} =", i);
Console.Out.Flush();
Console.WriteLine("{0}", 24 / i);
System.Threading.Thread.Sleep(1000);
if (exiting) return;
}
}
অ্যাপ্লিকেশনটি প্রস্থান হওয়ার আগে যখন অন্য থ্রেড কিছু পরিষ্কার করার জন্য ব্যতিক্রম ছুঁড়েছে তার আপনি বিজ্ঞপ্তি পেতে পারেন, তবে যতদূর আমি বলতে পারি, আপনি কনসোল অ্যাপ্লিকেশন থেকে অ্যাপ্লিকেশনটি চালিয়ে যেতে বাধ্য করতে পারবেন না যদি আপনি ব্যতিক্রমটি পরিচালনা না করেন তবে যে থ্রেড থেকে এটি অ্যাপ্লিকেশনটিকে এমনভাবে আচরণ করার জন্য কিছু অস্পষ্ট সামঞ্জস্যতার বিকল্পগুলি ব্যবহার না করে ছুঁড়ে ফেলা হয় x নেট 1.x. এই কোডটি প্রদর্শন করে যে কীভাবে মূল থ্রেডটি অন্য থ্রেড থেকে আসা ব্যতিক্রম সম্পর্কে অবহিত করা যেতে পারে তবে তবুও অসুখীভাবে শেষ হবে:
static bool exiting = false;
static void Main(string[] args)
{
try
{
System.Threading.Thread demo = new System.Threading.Thread(DemoThread);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
demo.Start();
Console.ReadLine();
exiting = true;
}
catch (Exception ex)
{
Console.WriteLine("Caught an exception");
}
}
static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine("Notified of a thread exception... application is terminating.");
}
static void DemoThread()
{
for(int i = 5; i >= 0; i--)
{
Console.Write("24/{0} =", i);
Console.Out.Flush();
Console.WriteLine("{0}", 24 / i);
System.Threading.Thread.Sleep(1000);
if (exiting) return;
}
}
সুতরাং আমার মতে, কনসোল অ্যাপ্লিকেশনটিতে এটিকে হ্যান্ডেল করার সর্বোত্তম উপায় হ'ল প্রতিটি স্তরের মূল স্তরে ব্যতিক্রম হ্যান্ডলার রয়েছে তা নিশ্চিত করা:
static bool exiting = false;
static void Main(string[] args)
{
try
{
System.Threading.Thread demo = new System.Threading.Thread(DemoThread);
demo.Start();
Console.ReadLine();
exiting = true;
}
catch (Exception ex)
{
Console.WriteLine("Caught an exception");
}
}
static void DemoThread()
{
try
{
for (int i = 5; i >= 0; i--)
{
Console.Write("24/{0} =", i);
Console.Out.Flush();
Console.WriteLine("{0}", 24 / i);
System.Threading.Thread.Sleep(1000);
if (exiting) return;
}
}
catch (Exception ex)
{
Console.WriteLine("Caught an exception on the other thread");
}
}
Console.ReadLine()
বা প্রোগ্রাম প্রবাহ অন্য কোন ঝামেলা কিন্তু কি আমি পেতে ব্যতিক্রম আবার এবং আবার পুনরায় উত্থাপন, এবং আবার