PDA

View Full Version : سوال: انجام تابع خاصی هنگام ایجاد یک Exception



forodo
شنبه 10 مرداد 1394, 15:53 عصر
سلام
من تقریباً 500 تا try catch دارم که می خوام هنگامی که catch اجرا میشه یا در اصل یک Exception اتفاق می افته یک تابعی در جای دیگه اجرا بشه.
نمی خوام اون تابع رو داخل catch بنویسم چون اونوقت باید این کار رو 500 بار انجام بدم که خیلی طولانی میشه.
چطور می تونم این کار رو انجام بدم؟
با تشکر

ژیار رحیمی
شنبه 10 مرداد 1394, 20:49 عصر
یه کلاس برای مدیریت خطاهات بساز و در catch ها به کلاس ارجاع بده.ودر داخل کلاس exption ها رو مدیریت کن و پیغام یا انجام عملی خاص رو به راحتی قابل پیاده سازی ست.
یه نمونه از کلاس شخصی سازی exception

[Serializable]
public class CustomException : Exception
{
public CustomException()
: base() { }


public CustomException(string message)
: base(message) { }


public CustomException(string format, params object[] args)
: base(string.Format(format, args)) { }


public CustomException(string message, Exception innerException)
: base(message, innerException) { }


public CustomException(string format, Exception innerException, params object[] args)
: base(string.Format(format, args), innerException) { }


protected CustomException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
}

behzadkhan
شنبه 10 مرداد 1394, 21:09 عصر
یه کلاس برای مدیریت خطاهات بساز و در catch ها به کلاس ارجاع بده.ودر داخل کلاس exption ها رو مدیریت کن و پیغام یا انجام عملی خاص رو به راحتی قابل پیاده سازی ست.
یه نمونه از کلاس شخصی سازی exception

[Serializable]
public class CustomException : Exception
{
public CustomException()
: base() { }


public CustomException(string message)
: base(message) { }


public CustomException(string format, params object[] args)
: base(string.Format(format, args)) { }


public CustomException(string message, Exception innerException)
: base(message, innerException) { }


public CustomException(string format, Exception innerException, params object[] args)
: base(string.Format(format, args), innerException) { }


protected CustomException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
}



با سلام

دوست عزیز

در صورت امکان لطفا یک تاپیک ایجاد و نحوه سفارشی سازی یک اکسپشن را توضیح دهید.

فکر می کنم یک آموزش جالب و مفیدی باشد.

با تشکر

forodo
یک شنبه 11 مرداد 1394, 08:00 صبح
یه کلاس برای مدیریت خطاهات بساز و در catch ها به کلاس ارجاع بده.ودر داخل کلاس exption ها رو مدیریت کن و پیغام یا انجام عملی خاص رو به راحتی قابل پیاده سازی ست.
یه نمونه از کلاس شخصی سازی exception

[Serializable]
public class CustomException : Exception
{
public CustomException()
: base() { }


public CustomException(string message)
: base(message) { }


public CustomException(string format, params object[] args)
: base(string.Format(format, args)) { }


public CustomException(string message, Exception innerException)
: base(message, innerException) { }


public CustomException(string format, Exception innerException, params object[] args)
: base(string.Format(format, args), innerException) { }


protected CustomException(SerializationInfo info, StreamingContext context)
: base(info, context) { }
}

یعنی توی تمام catchهای برنامه باید کلاس رو فراخوانی کنم؟
اگه اینطوریه نمی خوام این کار رو انجام بدم.
تعداد catchها خیلی زیاده.

محمد رضا فاتحی
یک شنبه 11 مرداد 1394, 08:34 صبح
شما بالاخره باید یه زحمتی بکشید..اگه try-catch ها نوشته نشدن و مدیریت خاصی هم قرار نیست روی اونها اتفاق بیوفته و صرفا جهت جلوگیری از کرش برنامس و نمایش خطا...می تونید این کار رو انجام بدید...
توی کلاس program.cs این کد ها رو اضافه کنید

static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(fals e);
Application.Run(new Form1());
Application.ThreadException+=Application_ThreadExc eption;
}


private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
//مدیریت خطا
}


با این کار هر جای برنامه هر خطای مدیریت نشده ای بده... می تونید مدیریت کنید...

barnamenevism
یک شنبه 11 مرداد 1394, 08:37 صبح
اگر catch می خوای فقط در حد خطای که اتفاق اقتاده رو به کار بر بگه... شاید این بدر بخوره
private void button2_Click(object sender, EventArgs e)
{
try
{

int y = 10 / int.Parse(textBox1.Text);
}
catch (Exception ex)
{
ExCeptionMessage(ex);

}
}
public void ExCeptionMessage(Exception ex)
{
MessageBox.Show(ex.ToString());

}

ژیار رحیمی
یک شنبه 11 مرداد 1394, 08:37 صبح
به نظر من تعداد try,catch هات خیلی زیادیه.از اول میبایست دنبال راه حل های بهتر برای پیاده سازی exception ها میگشتی و راه حل مناسب رو پیاده سازی میکردی.اگر امکانش هست بفرمایید در چه قسمت هایی از کد try.catch استفاده کردی که تعدادش به 500تا رسیده ؟
به نظر من راه حل دوست گرامی
rezafatehy (http://barnamenevis.org/member.php?78542-rezafatehy) مناسب کار شما میباشد