PDA

View Full Version : چطوری برنامه با هر error متوقف نشه؟



nbe( amateur C sharp
دوشنبه 13 خرداد 1392, 08:14 صبح
سلام...



میخواستم بدونم چه جوری می تونیم جلوی هر error ای که در برنامه پیش میاد رو بگیریم ، یعنی کاری کنیم که برنامه با error هایی که پیش میاد
متوقف نشه بلکه اون error رو رد کنه و به کار خودش ادامه بده ؟؟؟



چون بعضی error ها ممکن است در شرایطی غیر قابل پیش بینی اتفاق بیفتن ، این خیلی بد میشه که برنامه با اون error متوقف بشه، چه جوری میتونیم جلوش رو بگیریم که برنامه به کار خودش ادامه بده؟؟؟



مخصوصا error های null reference که ممکن است خیلی در قسمت های مختلف برنامه پیش بیان ، چه جوری میشه کاری کرد که برنامه در مواجه شدن با این error متوقف نشه و به کار خودش ادامه بده؟؟؟ اگر باید از try, catch استفاده کنیم ، باید دقیقا داخل catch چی بنویسیم که برنامه متوقف نشه و کار خودش رو ادامه بده؟؟؟



ممنونم...

Tiam121
دوشنبه 13 خرداد 1392, 09:05 صبح
باید از try, catch استفاده کنی و نیازی هم نیست توی بلوک catch چیز خاصی بنویسی هر کدی که نیاز داری برای اجرا در صورت بروز خطا رو بنویس مثلا میتونه یه پیام خطا باشه یا هر چیز دیگه ای که میخوای حتی در صورت بروز مشکل اجرا بشه

nbe( amateur C sharp
دوشنبه 13 خرداد 1392, 11:06 صبح
ممنون از پاسختون...

یعنی باید در هر قسمت برنامه که احتمال میدم error ای اتفاق بیفته try,catch استفاده کنم و اگر چیزی هم داخل بلاک catch ننویسم مشکلی پیش نمیاد؟

یعنی به این شکل:

try{} catch() {}

دیگه با error ای برنامه متوقف نمیشه؟

fool66
دوشنبه 13 خرداد 1392, 11:09 صبح
در واقع می تونی خطاهاتو کنترل و مدیریت کنی نه اینکه فقط جلوگیری کنی از رخدادشون

nbe( amateur C sharp
دوشنبه 13 خرداد 1392, 11:14 صبح
یعنی داخل بلاک catch خطا ها رو مدیریت کنم ، درسته؟

اما داخل پرانتز در catch() چیزی ننویسم ، مشکلی پیش نمیاد؟ دیگه برای هر error ای که پیش میاد سراغ این catch میره؟

fool66
دوشنبه 13 خرداد 1392, 11:16 صبح
اگه توی catch چیزی ننویسی وقتی خطا رخ میده عکس و العملی نشون نمیده

nbe( amateur C sharp
دوشنبه 13 خرداد 1392, 11:21 صبح
یعنی اگر برای null reference بخوام کنترل کنم باید بنویسم


catch (NullReferenceException exp)


اگر جیزی داخل پرانتر ننویسم عکسل العملی نشون نمیده؟

Tiam121
دوشنبه 13 خرداد 1392, 11:34 صبح
آره.و در صورتی که خطا رخ بده کدهای بلوک catch اجرا میشه

nbe( amateur C sharp
دوشنبه 13 خرداد 1392, 11:38 صبح
خوب اینجوری که باید برای برای هر نوع error من یه بلاک catch داشته باشم که ، درسته؟؟

اینجوری کار سخت نمیشه؟

Tiam121
دوشنبه 13 خرداد 1392, 11:42 صبح
اگر واسه catch ارور خاصی در نطر نگیری هر خطایی که رخ بده مدیریت میشه با کدهای بلوک catch اما اگر ارور خاصی مد نظرت باشه باید اونو لحاظ کنی

nbe( amateur C sharp
دوشنبه 13 خرداد 1392, 11:47 صبح
پس اگر به این شکل باشه :

try() catch() {}

و داخل بلاک catch کد های مدیریت خطا رو بنویسم اینجوری دیگه هر نوع خطایی پیش بیاد میره سراغ بلاک catch و متوقف نمیشه ، درسته ؟

Tiam121
دوشنبه 13 خرداد 1392, 11:54 صبح
دقیقا همینجوره اما وقتی که خطای مشخصی رو تعیین نکنی باید اینو در نطر داشته باشی که واسه هر خطایی دستورات بلوک catch اجرا میشه

nbe( amateur C sharp
دوشنبه 13 خرداد 1392, 11:57 صبح
بله درسته...

خیلی ممنونم از راهنمائیتون... .

khayyams.votary
دوشنبه 13 خرداد 1392, 12:20 عصر
اگه می خوای می تونی از این روش هم استفاده کنی که برای تمامی خطاهای اتفاق افتاده میشه استفاده کرد ولازم نیست برای هر کاری کد مخصوصه اونو بنویسی
try() catch(Exception exp) {Message.show("خطایی رخداد");}

nbe( amateur C sharp
دوشنبه 13 خرداد 1392, 12:38 عصر
ممنون از راهنمائیتون

nbe( amateur C sharp
دوشنبه 13 خرداد 1392, 14:56 عصر
این تکه کد چی کار میکنه:

try{} catch {return;}

یعنی return اینجا بر میگرده به همون جایی که error رخ داده و باعث شده که به بلاک catch بیاد؟

Tiam121
دوشنبه 13 خرداد 1392, 15:14 عصر
نه این باعث میشه به آخر تابع جاری بری و ازش خارج بشی

nbe( amateur C sharp
دوشنبه 13 خرداد 1392, 15:20 عصر
ok, ممنون...