PDA

View Full Version : سوال: رخ دادن استثنا هنگام بکار بردن متد Invoke



nofilter
دوشنبه 31 خرداد 1389, 08:27 صبح
دوستان سلام
مجبور بودم یه تاپیک دیگه بزنم
خودم کمی جستجو کردم و این متن رو پیدا کردم :
You may receive this exception when you use the Invoke() method (of a form perhaps). The cause of this exception is another exception which occured inside the method being invoked.
Since you don't know what actually went wrong inside the method that was being invoked, we will need to get the inner exception of the method.
Suppose we have the following line which invokes a method:

MyForm.Invoke(MyForm.MyDelegate, new Object[] { someParameter });
To catch the exception, enclose the line within a try/catch block and get the InnerException:

try
{
MyForm.Invoke(MyForm.MyDelegate, new Object[] { someParameter });
}
catch (Exception ex)
{
MessageBox.Show(ex.InnerException.Message);
}
This should show you the actual exception message inside a message box.



لینک :
http://www.geekpedia.com/KB70_Exception-has-been-thrown-by-the-target-of-an-invocation.html

خوب من همه این کارها رو در برنامه خودم انجام دادم و حالا این خطا رو میده :
Error 1 not all code paths return a value invocation



اوون پیغام هم داره میگه که متد باید یه مقداری رو برگردونه!
هر کاری می کنم خطای عدم تبدیل نوع داده ها رو میده

nofilter
دوشنبه 31 خرداد 1389, 08:56 صبح
من خط پایینو بجای مقدار بازگشتی نوشتم :
return null;
و برنامه بعد از چند باز پیغام خطای پایین اجرا میشه
boject reference not set to an instance of an object

حالا به نظر شما این خطا دیگه چی هست ؟

ASKaffash
دوشنبه 31 خرداد 1389, 09:09 صبح
سلام
من این تغییر را ایجاد کردم برنامه کار می کند :


private static T GetIstance<T>(Type t) where T : class {
if(t == null)
throw new ArgumentNullException("t", "type cannot be null");
try
{
return t.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }) as T;
}
catch { }
return null;
}

exlord
دوشنبه 31 خرداد 1389, 09:13 صبح
private static T GetIstance<T>(Type t) where T : class {
if(t == null)
throw new ArgumentNullException("t", "type cannot be null");
try
{
return t.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }) as T;
}
catch (Exception ex)
{
MessageBox.Show(ex.InnerException.Message);
return null;
}
}

exlord
دوشنبه 31 خرداد 1389, 09:20 صبح
سلام
من این تغییر را ایجاد کردم برنامه کار می کند :


private static T GetIstance<T>(Type t) where T : class {
if(t == null)
throw new ArgumentNullException("t", "type cannot be null");
try
{
return t.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }) as T;
}
catch { }
return null;
}


catch { }
به این کار میگن پاک کردن صورت مساله نه حل کردنش :قهقهه::قهقهه::قهقهه:.........

exlord
دوشنبه 31 خرداد 1389, 09:25 صبح
من خط پایینو بجای مقدار بازگشتی نوشتم :
return null;
و برنامه بعد از چند باز پیغام خطای پایین اجرا میشه
boject reference not set to an instance of an object

حالا به نظر شما این خطا دیگه چی هست ؟
خوب trace کن ببین از کجا میاد ......

nofilter
دوشنبه 31 خرداد 1389, 09:34 صبح
خوب trace کن ببین از کجا میاد ......
خیلی ممنون دوستان عزیزم

من trace هم کردم ولی نفهمیدم که از کجا میاد !

لطفا راهنمایی کنید

nofilter
دوشنبه 31 خرداد 1389, 09:36 صبح
سلام
من این تغییر را ایجاد کردم برنامه کار می کند :


private static T GetIstance<T>(Type t) where T : class {
if(t == null)
throw new ArgumentNullException("t", "type cannot be null");
try
{
return t.GetConstructor(Type.EmptyTypes).Invoke(new object[] { }) as T;
}
catch { }
return null;
}


آقا خیلی ممنون
با کد شما امتحان کردم و بدون هیچ مشکلی اجرا شد.

nofilter
دوشنبه 31 خرداد 1389, 09:36 صبح
catch { }
به این کار میگن پاک کردن صورت مساله نه حل کردنش :قهقهه::قهقهه::قهقهه:.........
دوست عزیز میشه بیشتر توضیح بدین

ASKaffash
دوشنبه 31 خرداد 1389, 09:43 صبح
catch { }
به این کار میگن پاک کردن صورت مساله نه حل کردنش :قهقهه::قهقهه::قهقهه:.........
سلام
اگر برنامه نویس مشخص نیست مستندات مشخص نیست برنامه در همان ابتدا Error می گیرد پس بهترین روش پاک کردن صورت مسئله است در واقع برنامه نویس حتی زحمت تست را به خودش نداده

exlord
دوشنبه 31 خرداد 1389, 09:45 صبح
دوست عزیز میشه بیشتر توضیح بدین
تو این حالت ارور های برنامه حل نشدن بلکه catch { } میشن ولی از اونجایی که بهش نگفتیم بهد از catch شدن چیکار کنه ...این بدبحتم کاری نمیکنه .... ولی exception ها اتفاق میافتن ...

nofilter
دوشنبه 31 خرداد 1389, 09:46 صبح
سلام
اگر برنامه نویس مشخص نیست مستندات مشخص نیست برنامه در همان ابتدا Error می گیرد پس بهترین روش پاک کردن صورت مسئله است در واقع برنامه نویس حتی زحمت تست را به خودش نداده
دوست عزیز قبول دارم که برنامه نویس مشخص نیست! ولی اگه بخواین می تونم مستندات رو هم اینجا بزارم.

حالا به نظر شما چطور میشه که جلوی اوون خطا رو هم بگیریم ؟

ASKaffash
دوشنبه 31 خرداد 1389, 09:55 صبح
سلام
خطا در یکی از اعضای کلکسیون Controller است (عضو OneArrowAngle ) :


foreach(Type t in Controller.ArrowTypes) {
AddShapeType(t, linkModeTS, lTypeHandler);
AddShapeType(t, lineKindTSMI, lTypeHandler);

با حدس و خطا که نمی شود رفع Bug کرد

nofilter
دوشنبه 31 خرداد 1389, 10:06 صبح
سلام
خطا در یکی از اعضای کلکسیون Controller است (عضو OneArrowAngle ) :


foreach(Type t in Controller.ArrowTypes) {
AddShapeType(t, linkModeTS, lTypeHandler);
AddShapeType(t, lineKindTSMI, lTypeHandler);
با حدس و خطا که نمی شود رفع Bug کرد
دوست عزیز لطفا بیشتر توضیح بدین.
اگه میشه راه حل رو بگین.

exlord
دوشنبه 31 خرداد 1389, 10:09 صبح
تو کلاس OneArrowAngle : OneArrow

protected override void OnTextChange()
{
if (SubLines != null)
{
if (SubLines.Count > 1)
SubLines[_reverse ? 0 : 1].Text = Text;
}
}

exlord
دوشنبه 31 خرداد 1389, 10:14 صبح
تو کلاس NoArrowFragmented : Line

protected override void OnTextChange()
{
if (SubLines != null)
{
if (SubLines.Count > 1)
SubLines[1].Text = Text;
}
base.OnTextChange();
}

nofilter
دوشنبه 31 خرداد 1389, 10:41 صبح
با تشکر از زحمات دوستان خوبم exlord (http://barnamenevis.org/forum/member.php?u=77199) و ASKaffash (http://barnamenevis.org/forum/member.php?u=63973)
بالاخره بعد از 10 روز تونستم به نتیجه مورد نظر خودم برسم.

من به زودی جبران خواهم کرد(لطفا پیغام خصوصی تون رو چک کنید)

[/URL]

[URL="http://barnamenevis.org/forum/member.php?u=63973"] (http://barnamenevis.org/forum/member.php?u=63973)