PDA

View Full Version : چطور ميشه هر خطايي كه برنامه داد به كارش ادامه بده و كرش نكنه



youngold
یک شنبه 28 آبان 1391, 07:28 صبح
چطور ميشه هر خطايي كه برنامه داد به كارش ادامه بده و كرش نكنه

shp_com
یک شنبه 28 آبان 1391, 08:02 صبح
فکر می کنم که بهتر هست که شما این (http://msdn.microsoft.com/en-us/library/s9ek7a19(v=vs.80).aspx)اینک رو دنبال کنید. خیلی از سوالات شما جواب داده می شه. اگه باز هم سوالی بود مطرح کنید.

arefba
یک شنبه 28 آبان 1391, 08:56 صبح
با استفاده از try

try
{
//your command
}
catch (Exception err)
{
MessageBox.Show(err.Message);
}

AmirGhasemi
یک شنبه 28 آبان 1391, 11:44 صبح
سلام
با استفاده از try و catch مي شود كه خطاها را مديريت كرد

youngold
یک شنبه 28 آبان 1391, 14:46 عصر
خسته نباشين..
عرض كردم هر خطايي
منظور بنده در رابطه با خطا هاي مديريت نشده بود
به نوعي بشه exception خطا رو terminate كرد ، مثل اينكه وقتي كه زمان اجرا خطاي دات نتي ميگيريم شما continue ميزنيد اون قسمت از برنامه رو ناديده ميگيره و كرش نميكنه

maktoom
یک شنبه 28 آبان 1391, 18:41 عصر
سلام

منظور بنده در رابطه با خطا هاي مديريت نشده بود
خب با کمی فکر در مورد این موضوع میشه به نادرست بودن بیسش پی برد. چرا باید سیستم دارای باگ باشه و باگش رو رها کنه؟
اگه این خطا ناشی از مسائل مهمی مثل تقسیم بر صفر باشه که خود سیستم می گیره.
اگه خطا ناشی از بروز خطا از خطای از قبل بوجود اومده باشه، مثل نتیجه یک متد بخواد بعنوان ورودی یه متد دیگه بشه و در مرحله قبل خطا رخ داده، این رو هم سیستم میگیره.
اما گاهی مثلا میخواید توی تکست باکس فقط عدد وارد بشه، یا توی یه سری محاسبات حرف وارد نشه. اینجا هم خودتون چون چیز کاستومایز می خواید خطا رو میگیرید مدیریت میکنید پیغام رو پرتاب می کنید.
اما گاهی می خواید اگه خطا هم از طرف کاربر بود بگذره... خب اینجا دقیقا نباید کاری بکنید! یعنی لازم نیست خطا رو بگیرید.
اما اگه خطا یه چیز مهم مثل تقسیم بر صفر باشه بالاخره باید به نحوی مدیریت بشه. یعنی بالاخره این هیچ کاری نکردن هم باید توی فرایند مدیریت خطا ساماندهی بشه.

youngold
یک شنبه 28 آبان 1391, 19:31 عصر
سلام

خب با کمی فکر در مورد این موضوع میشه به نادرست بودن بیسش پی برد. چرا باید سیستم دارای باگ باشه و باگش رو رها کنه؟
اگه این خطا ناشی از مسائل مهمی مثل تقسیم بر صفر باشه که خود سیستم می گیره.
اگه خطا ناشی از بروز خطا از خطای از قبل بوجود اومده باشه، مثل نتیجه یک متد بخواد بعنوان ورودی یه متد دیگه بشه و در مرحله قبل خطا رخ داده، این رو هم سیستم میگیره.
اما گاهی مثلا میخواید توی تکست باکس فقط عدد وارد بشه، یا توی یه سری محاسبات حرف وارد نشه. اینجا هم خودتون چون چیز کاستومایز می خواید خطا رو میگیرید مدیریت میکنید پیغام رو پرتاب می کنید.
اما گاهی می خواید اگه خطا هم از طرف کاربر بود بگذره... خب اینجا دقیقا نباید کاری بکنید! یعنی لازم نیست خطا رو بگیرید.
اما اگه خطا یه چیز مهم مثل تقسیم بر صفر باشه بالاخره باید به نحوی مدیریت بشه. یعنی بالاخره این هیچ کاری نکردن هم باید توی فرایند مدیریت خطا ساماندهی بشه.


متوجه منظور شما هستم، در نظر بگيريد در يك نخ وقتي به خطا خورديم اون نخ متوقف بشه و ساير thread هاي برنامه همچنان به كارشون ادامه بدن ،‌اصلاً به طور كلي ميخوايم هر خطايي كه در برنامه به وجود اومد نخ اون متوقف بشه همين. بحث مديريت خطا يا خصوصي سازي نيست دوست عزيز
شايد شما تا به حال بهش بر نخوردي ولي گاهي شايد بخوايم بنا به ساختار برنامه كه خودمون ميدونيم! ساير نخ ها به كارشون ادامه بدن و خطا نقشي در ديگر اعضاي برنامه نداشته باشه.
اميدوارم متوجه شده باشيد! من در app.config چيزي مشابه همين ديدم اگر حضور ذهن داشته باشم كه وضعيت خطا هارو ميشد تا حدودي تنظيم كرد احتمالاً براي اين موضوع هم بايد تنظيمي به صورت كلي تعيين شده باشه.

youngold
یک شنبه 28 آبان 1391, 19:36 عصر
به طور مثال در


AppDomain.CurrentDomain.FirstChanceException += new EventHandler<System.Runtime.ExceptionServices.FirstChanceExcept ionEventArgs>(CurrentDomain_FirstChanceException);


ميشه خطا ها رو قبل از كرش برنامه رهگيري و متدي رو اجرا كرد اما نميشه نخ اون خطا رو متوقف و سركوب كرد
احتمالاً بايد در runtime اختياري براي اين موضوع باشه

maktoom
سه شنبه 30 آبان 1391, 00:37 صبح
شما باید نخ رو terminated و یا abort کنید.
و دقیقا بحث مدیریت خطاست.
همین الان دارم از روی کتاب دیتل می خونم. در فصل مربوط به نخ ها در قسمت انواع عملیات، این موضوع رو تاکید کرده.
منظورتون رو درست متوجه شدم؟
این رو سرچ کنید:
how to terminate a thread in c#
یا:
how to abort a thread in c#

youngold
سه شنبه 30 آبان 1391, 03:05 صبح
شما باید نخ رو terminated و یا abort کنید.
و دقیقا بحث مدیریت خطاست.
همین الان دارم از روی کتاب دیتل می خونم. در فصل مربوط به نخ ها در قسمت انواع عملیات، این موضوع رو تاکید کرده.
منظورتون رو درست متوجه شدم؟
این رو سرچ کنید:
how to terminate a thread in C#‎‎‎
یا:
how to abort a thread in C#‎‎‎


خير دوست عزيز، بنده تازه كار نيستم
با حفظ احترام شما همچنان روي فكر خودتون داريد پافشاري ميكنيد
موضوع دقيقاً تعريف يك رفتار در runtime براي زماني كه هر نخ از برنامه به خطا ميخوره هست ، يك رفتار كلي ، نه abort كردن يك نخ خاص!

براي مثال پروژه اي داريد گسترده و با نخ هاي متعدد ، مسلماً نميخواهيد براي هر نخ try catch بزاريد
شايد بنده عنوان تاپيك رو مبتديانه طرح كردم
با تشكر از جوابتون ظاهراً اطلاعات شما در اين زمينه كافي نميباشد

maktoom
چهارشنبه 01 آذر 1391, 01:25 صبح
چطور ميشه هر خطايي كه برنامه داد به كارش ادامه بده و كرش نكنه
درسته عنوان به پیشرفتگی ای که شما منظورتون بوده نمی خوره.
بیشتر شبیه اینه که یه برنامه نویس مبتدی توی برنامش خطا برخورده تازه مبحث خطا و استثنائات رو مطالعه کرده و نحوه پیاده سازیش رو نمی دونه.
پیشنهاد می کنم با جستجو برای پیدا کردن اصطلاح دقیق این مشکل، یه تاپیک جدا بزنید.
می تونید از اصطلاح "حرفه ای" هم قبل از عنوان تاپیکتون استفاده کنید.
موفق باشید

youngold
چهارشنبه 01 آذر 1391, 09:17 صبح
در اين راستا تاپيكي به عنوان ويژگي هاي C#‎ و زمان اجرا (common language runtime) (http://barnamenevis.org/showthread.php?369716-**-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%D9%8A-%D9%88%D9%8A%DA%98%DA%AF%D9%8A-%D9%87%D8%A7%D9%8A-c-%D9%88-%D8%B2%D9%85%D8%A7%D9%86-%D8%A7%D8%AC%D8%B1%D8%A7-%28common-language-runtime%29) ايجاد شد

اميد است مديران محترم بخش سوالات حرفه رو به كلي جدا كنند البته بنده فكر نميكنم اين سوالم اونقدر حرفه بوده باشه!