PDA

View Full Version : Throw کردن Exception



mahdi5121
چهارشنبه 26 آبان 1389, 19:52 عصر
سلام...
می شه یه Exception رو بیرون از یک Throw ,Try.....Catch کرد؟
منظورم اینه که چرا نمی شه این کد رو :



try
{
if (int.Parse(textBox1.Text) == 0)
{
throw new System.Exception("Your Number is equals then zero");
}
else
{
throw new System.Exception("Your Number is bigger then zero");
}
}
catch (System.Exception err)
{
MessageBox.Show(err.Message);
}


این مدلی نوشت؟



if (int.Parse(textBox1.Text) < 0)
{
throw new System.Exception("Yor Number is Less Then zero");
}
//----------------------------
try
{
if (int.Parse(textBox1.Text) == 0)
{
throw new System.Exception("Your Number is equals then zero");
}
else
{
throw new System.Exception("Your Number is bigger then zero");
}
}
catch (System.Exception err)
{
MessageBox.Show(err.Message);
}

محسن شامحمدی
چهارشنبه 26 آبان 1389, 20:08 عصر
می شه یه Exception رو بیرون از یک Throw ,Try.....Catch کرد؟بله.100٪


if (int.Parse(textBox1.Text) < 0)
{
throw new System.Exception("You Number is Less Then zero");
}
خب تنها مشکلی که این حالت نسبت به قبلی داره اینه که این exception به دست کاربر برنامه می رسه و توسط کد کنترل نمی شه!
در این حالت کاربر با یک پنجره این شکلی مواجه می شه
http://www.aaronbertrand.com/voodoo/unhandled_exception_a.gif

mahdi5121
چهارشنبه 26 آبان 1389, 20:24 عصر
بله.100٪
خب تنها مشکلی که این حالت نسبت به قبلی داره اینه که این exception به دست کاربر برنامه می رسه و توسط کد کنترل نمی شه!
در این حالت کاربر با یک پنجره این شکلی مواجه می شه
http://www.aaronbertrand.com/voodoo/unhandled_exception_a.gif


من می خوام بدست کاربر برنامه نویس نرسه و Catch بشه .راهی نیست .
در ضمن پیغامی که برای من می یاد اینه :


http://www.ecapic.ir/image2/ECA-101117204845.jpg

http://www.pic.iran-forum.ir/images/fuddkh3s9wc7pjw93g7w.jpg

محسن شامحمدی
چهارشنبه 26 آبان 1389, 20:41 عصر
من می خوام بدست کاربر برنامه نویس نرسه و Catch بشه .راهی نیست ؟.
خب فلسفه ایجاد بلوک try/catch همینه دیگه.
ولی حرف اینه که شما می خواید از این بلوک استفاده نکنید ولی همچنان بتونید exception هاتون رو کنترل کنید درسته؟


در ضمن پیغامی که برای من می یاد اینه :
بله بنده هم می دونم بنده چیزی که کاربر می بینه رو گذاشتم نه چیزی که شما می بینی!

mahdi5121
چهارشنبه 26 آبان 1389, 20:49 عصر
ولی حرف اینه که شما می خواید از این بلوک استفاده نکنید ولی همچنان بتونید exception هاتون رو کنترل کنید درسته؟



آره،می شه؟

hoorfar
پنج شنبه 27 آبان 1389, 04:07 صبح
http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception(v =VS.80).aspx

kamran00f
پنج شنبه 27 آبان 1389, 12:18 عصر
سلام...
می شه یه Exception رو بیرون از یک Throw ,Try.....Catch کرد؟
منظورم اینه که چرا نمی شه این کد رو :







try
{


if (int.Parse(textBox1.Text) == 0)



{

throw new System.Exception("Your Number is equals then zero");
}
else
{
throw new System.Exception("Your Number is bigger then zero");
}
}
catch (System.Exception err)
{

MessageBox.Show(err.Message);


}






این مدلی نوشت؟









if (int.Parse(textBox1.Text) < 0)







{







throw new System.Exception("Yor Number is Less Then zero");







}







//----------------------------







try







{







if (int.Parse(textBox1.Text) == 0)







{







throw new System.Exception("Your Number is equals then zero");







}







else







{







throw new System.Exception("Your Number is bigger then zero");







}







}







catch (System.Exception err)







{







MessageBox.Show(err.Message);







}









کاملا میشه، فقط مسئله اینجاس که کد دومی که نوشتی 2بار expetion رو throw میکنه ولی یک بار catch میشه و یکیش unhandled میمونه و اون پیغامی که دیدیو نشون میده. ببین کاربرد اینی که تو میخوای (یعنی بیرون از بلاک try...catch بخوای exeption ای رو throw کنی) واسه جایی هست که تو بخوای یه تابع یا متدی بنویسی و تو حالت خاصی بدونی ممکنه با مشکل مواجه شه (مثلا اگه به طور ناخواسته ارتباط با اینترنت قطع شد) اینجوری یه exeption پرتاب میکنی و تو توضیحات تابعی که نوشتی میگی که این تابع ممکنه فلان exeption رو throw کنه تا کاربری که میخواد از تابع تو استفاده کنه بعدا اون رو تو یه بلاک try...catch قرار بده که اگه exeption ات رخ داد اونو handle کنه. درست مثل توابع .net ای که خودتم ازشون اینهمه استفاده می کنی و اونارو تو try...catch قرار میدی. خلاصه هر exeption ای باید آخر یه جا به یه catch برسه و handle شه تا این error که میبینیو نده و برنامه تا آخر پیش بره.

محسن شامحمدی
پنج شنبه 27 آبان 1389, 14:33 عصر
جناب kamranoof :
مثل اینکه شما اصلا لینکی که دوستمون hoorfar (http://www.barnamenevis.org/forum/member.php?u=75092) گذاشتن رو مطالعه نکردید.
جواب این معما توی این لینکه
Application.ThreadException Event (http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception%2 8v=VS.80%29.aspx)