سلام بدون کرونا به همه
یه نکته ای اول بگم قاعدتا داریم در مورد اکسپشن های پروگرم صحبت میکنیم و خطاهای که مربوط به فئیل سیستم باشه قضیه اش متفاوته و با این روش ها نمیشه کنترل کرد.
و اما بعد، کمپوننت آماده ای که نیست یا حداقل خود ویژوال استودیو برای ویندوز فرم نداره اما میشه خطا رو سفارشی (Custom Exception) که از کلاس اسکپشن ارث میبره در حد دریافت متن خطا (اینر دیتا) و نمایش پیام سفارشی اینها ولی به این مسیج که عکسش رو گذاشتی نمیشه دکمه ای اضافه کرد. چون اساسا کلاس اکسپشن ویژگی هایی مانند دیتا و اینتر مسیج و تارگت و البته لینک راهنما داخلش هست و متاسفانه مثل مسیج باکس به ما امکان انتخاب دکمه های پیام رو نمیده. (داخل پارانتر یه کم دستمون تو WPF بازتره نسبت به ویندوز فرم)
دو تا راه نمایش هست:
*** راه اول اینه داخل بخش اکسپشن مسیج باکس ویندوز رو نمایش بدین (MessageBox.Show) که چندتا اینام داره برای انتخاب دکمه ها! ولی دکمه هاش محدوده !
*** راه دومش اینه یه فرم مخصوص درست کنین. خودتون دکمه های مورد نظر رو داخل بذارین. متن خطا رو هم که از اکسپشن دریافت کنین به فرمت مورد نیاز نمایش یا ذخیره یا ارسال کنین.
!!! میتونین تو بک گراند یه پینگ بگیرین و اگه اینترنت وجود داشته ایمیل کنین اگه نبود تو یه فایل ذخیره کنین یا یه کم حوصله و سلیقه به خرج بدین کلاس و آبجکت مدل تعریف کنین و ایکس ام ال کنین و ذخیره کنین. حالا ایتنکه یوزر خودش فایل رو برای شما بفرسته و یا دوباره یه چیزی بنیویسین که پوشه اکسپشن ها رو بخونه و اپلود کنه برای شما هم یه نکته دیگه است.
برای اینکه بشه سوال شما رو بهتر جواب داد، لازمه ببینیم کجا میخوایم این اکسپشن ها رو مدیریت کنیم.
حالت اول: آیا جاهای خاصی که میدونیم ترای کچ (try catch) بذاریم و تو بخش کچ اکسپن رو بگیریم و از دیتای داخل اکسپن که تو کچ به دست میاد استفاده کنیم مثلا یه تابعی ارسال به ایمیل یا ذخیره در فایل و ... اونجا فراخوانی بشه.
try
{
}
catch (Exception ex)
{
// تابع شما برای استفاده ex
throw;
}
البته یه چیزی! بعد از ترای کچ، یه استپ هم هست فاینالی اونم گاهی به کار میاد Finally. که در هر دو صورت تراک و کچ این بخش فاینال اجرا میشه.
حالت دوم: کل اکسپشنهای اپلیکیشین ثرد رو یه جا هندل کنین Application[COLOR=var(--black-750)].[/COLOR]ThreadException
ائونت رو بسازین و داخل تابع مورد نظر رو فراخوانی کنین. این کار باید تو پروگرم اصلی برنامه انجام بشه که مربوط به خطاهای ثرد اصلی و فرم و گرافیک و اینهاست.
اگر برنامه تون مولتی ثرد هستش، یه ائونت دیگه رو هم باید هندل کنین به نام appdomain.unhandled expetion.
در اخر یاداوری کنم وقتی به روش دوم (از پایه) همه اکسپشن ها رو هندل میکنین دیگه ترای کچ که به روش اول نوشتین تحت کنترل نیست.