উত্তর:
অ্যাপ্লিকেশন.ট্রেডএক্সেপশন উইন্ডোজ ফর্মগুলির জন্য নির্দিষ্ট। উইন্ডোজগুলি উইন্ডোজ দ্বারা প্রেরিত বার্তাগুলির প্রতিক্রিয়া হিসাবে ইভেন্ট হ্যান্ডলারগুলি চালায়। উদাহরণস্বরূপ ক্লিক ইভেন্ট, আমি নিশ্চিত যে আপনি এগুলি জানেন। যদি এই জাতীয় ইভেন্ট হ্যান্ডলার কোনও ব্যতিক্রম ছুঁড়ে ফেলে তবে উইনফর্মস বার্তা লুপের ভিতরে একটি ব্যাক-স্টপ রয়েছে যা সেই ব্যতিক্রমটিকে ধরে ফেলে।
সেই ব্যাকস্টপটি অ্যাপ্লিকেশন.ট্রেডএক্সসেপশন ইভেন্টটিকে আগুন ধরিয়ে দেয় । আপনি যদি ওভাররাইড না করেন তবে ব্যবহারকারী একটি থ্রেডএক্সসেপশন ডায়ালগ পাবেন । যা তাকে ব্যতিক্রম উপেক্ষা করতে এবং আপনার প্রোগ্রামটি চালিয়ে যেতে দেয়। বিটিডব্লু কোনও দুর্দান্ত ধারণা নয়।
আপনি এই আচরণটি অক্ষম করতে পারেন অ্যাপ্লিকেশন.সেটউনহ্যান্ডলএক্সেপশনমড () প্রোগ্রাম.সিএস-এ মেইন () পদ্ধতিতে। জায়গায় সেই ব্যাকস্টপ ব্যতীত, স্বাভাবিক জিনিসটি ঘটে যখন একটি থ্রেড অবিবাহিত ব্যতিক্রম থেকে মারা যায়: অ্যাপডোমেন আগুন এবং প্রোগ্রামটি সমাপ্ত হয়।
ফিউইউউ: "থ্রেডএক্সসেপশন" খুব খারাপ নাম পছন্দ ছিল। থ্রেডের সাথে এর কোনও যোগসূত্র নেই।
উত্স থেকে :
উইন্ডোজ ফর্মগুলি ব্যবহার করে এমন অ্যাপ্লিকেশনগুলিতে, মূল অ্যাপ্লিকেশন থ্রেডে আনহ্যান্ডেল ব্যতিক্রমগুলি
Application.ThreadException
ইভেন্টটিকে উত্থাপিত করে। যদি এই ইভেন্টটি পরিচালনা করা হয়, ডিফল্ট আচরণটি হ'ল হাতছাড়া ব্যতিক্রম অ্যাপ্লিকেশনটি শেষ করে না, যদিও অ্যাপ্লিকেশনটি অজানা অবস্থায় রেখে দেওয়া হয়েছে। সেক্ষেত্রেUnhandledException
ঘটনাটি উত্থাপিত হয় না। অ্যাপ্লিকেশন কনফিগারেশন ফাইল ব্যবহার করে বা ইভেন্ট হ্যান্ডলারটি জড়িত হওয়ার আগেApplication.SetUnhandledExceptionMode
মোডটি পরিবর্তন করার পদ্ধতিটি ব্যবহার করে এই আচরণটি পরিবর্তন করা যেতে পারে । এটি কেবলমাত্র মূল অ্যাপ্লিকেশন থ্রেডের জন্য প্রযোজ্য। ঘটনা অন্যান্য থ্রেডের মধ্যে নিক্ষিপ্ত অপরিচালিত ব্যতিক্রম জন্য উত্থাপিত হয়।UnhandledExceptionMode.ThrowException
ThreadException
UnhandledException
ভিজ্যুয়াল স্টুডিও ২০০৫ থেকে শুরু করে , ভিজ্যুয়াল বেসিক অ্যাপ্লিকেশন কাঠামোটি মূল অ্যাপ্লিকেশন থ্রেডে অপরিবর্তিত ব্যতিক্রমগুলির জন্য অন্য ইভেন্ট সরবরাহ করে -
WindowsFormsApplicationBase.UnhandledException
। এই ইভেন্টটিতে অ্যাপডোমাইন দ্বারা ব্যবহৃত ইভেন্ট আর্গুমেন্ট অবজেক্ট হিসাবে একই নামে একটি ইভেন্ট আর্গুমেন্ট অবজেক্ট রয়েছে Uহানডেলড এক্সসেপশন, তবে বিভিন্ন বৈশিষ্ট্য সহ। বিশেষত, এই ইভেন্টের আর্গুমেন্টের অবজেক্টের এমন একটিExitApplication
সম্পত্তি রয়েছে যা অ্যাপ্লিকেশনটি চালিয়ে যেতে দেয়, অযাচিত ব্যতিক্রম উপেক্ষা করে (এবং অ্যাপ্লিকেশনটিকে অজানা অবস্থায় রেখে দেয়)। সেক্ষেত্রে AppDomain.UnhandledException ইভেন্ট উত্থাপিত হয় না।
Application.ThreadException
ধরা পড়তে পারে এবং অ্যাপ্লিকেশনটি চালিয়ে যেতে পারে (সাধারণভাবে একটি দুর্দান্ত ধারণা নয়, তবে পর্যায়ক্রমে কিছু ক্রিয়া চালানোর মতো অ্যাপ্লিকেশনটির জন্য এটি একটি ভাল সমাধান)।
উইন্ডোজ ফর্মগুলির মালিকানাধীন এবং মালিকানাধীন থ্রেডগুলিতে ঘটে যাওয়া ব্যতিক্রমগুলি ধরার জন্য এটি ব্যবহার করুন AppDomain.UnhandledException
। সিস্টেম ডিফল্ট হ্যান্ডলার ব্যবহারকারীর ব্যতিক্রমটির প্রতিবেদন করে এবং অ্যাপ্লিকেশনটি সমাপ্ত করার আগে এটি অ্যাপ্লিকেশনটিকে ব্যতিক্রম সম্পর্কিত তথ্য লগ করতে দেয়।
এই ব্যতিক্রম হ্যান্ডলিং অ্যাপ্লিকেশন শেষ হতে বাধা দেয় না।
সর্বাধিক যা করা সম্ভব হয়েছিল (ব্যতিক্রমগুলি পরিচালনা না করা হলে প্রোগ্রামের ডেটাগুলি কলুষিত হতে পারে) পরে পুনরুদ্ধারের জন্য প্রোগ্রামের ডেটা সংরক্ষণ করা হয়। এর পরে অ্যাপ্লিকেশন ডোমেনটি লোড হয় এবং অ্যাপ্লিকেশনটি সমাপ্ত হয়।
.NET 4 দিয়ে শুরু করে, ইভেন্টটি হ্যান্ডলারটি সুরক্ষামূলক-সমালোচনা না করা এবং বৈশিষ্ট্য না থাকলে প্রক্রিয়াটির অবস্থা যেমন স্ট্যাক ওভারফ্লোস বা অ্যাক্সেস লঙ্ঘনকে দূষিত করে, এই ইভেন্টটি উত্থাপিত হয় না
HandleProcessCorruptedStateExceptionsAttribute
।
আরও তথ্যের জন্য, এমএসডিএন দেখুন ।
ঠিক আছে - আমার সামনে এটি ছিল, এমএসডিএন থেকে এই বিট কোডটি বেশ স্ব- বর্ণনামূলক :
public static void Main(string[] args)
{
// Add the event handler for handling UI thread exceptions to the event.
Application.ThreadException += new
ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);
// Set the unhandled exception mode to force all Windows Forms
// errors to go through our handler.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
// Add the event handler for handling non-UI thread exceptions to the event.
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
// Runs the application.
Application.Run(new ErrorHandlerForm());
}
ভাল কথাটি হ'ল, ThreadException
আপনার থ্রেডে কোনও সমস্যার কারণে ঘটে, Unhandled Exception
যদি আপনি কোডটি কোনও ব্যতিক্রম ছুঁড়ে দেন যা পরিচালনা করা হয় না fired
দ্বিতীয়টির কারণ হওয়ার সহজ উপায় হ'ল কোনও চেষ্টা ছাড়াই একটি অ্যাপ তৈরি করা ... ব্লক ধরুন এবং একটি ব্যতিক্রম ছুঁড়ে দিন।
এখন আপনার যদি বীমা প্রয়োজন হয় তবে আপনি সেগুলি উভয়ই পরিচালনা করতে পারেন, তবে আপনি যদি exceptions
সঠিকভাবে ক্যাপচার করেন এবং পরিচালনা করেন তবে আপনার UnhandledException
হ্যান্ডলারের প্রয়োজন হবে না কারণ এটি সমস্ত ধরণের ধরার মতো।
Application.ThreadException
। আমি আমার ছোট সি # কোড দিয়ে এর জন্য [এখানে ] একটি প্রশ্ন উত্থাপন করেছি।